---
title: "The Impact of Police Killings on Proximal Voter Turnout"
author: "G. Agustin Markarian"
header-includes:
- \usepackage{setspace}\doublespacing
- \usepackage{dcolumn}
- \usepackage{pdflscape}
- \newcommand{\blandscape}{\begin{landscape}}
- \newcommand{\elandscape}{\end{landscape}}
- \usepackage{float}
- \usepackage{caption}
- \usepackage{graphicx}
- \captionsetup[table]{labelformat=empty}
- \captionsetup[figure]{labelformat=empty}
output:
  pdf_document: default
  word_document: default
  figsintext: no
nocite: '@*'
indent: yes
bibliography: bibPS.bib
---

\newpage

\textbf{Abstract:} This paper studies how spatial proximity to pre-election police killings affects voter turnout. I argue that incidents of police violence have neighborhood-level effects. Nearby voters are more likely to learn about proximal killings than those further away. If perceived as unjust, police killings teach political lessons that reduce voters' trust in government and political efficacy. In turn, this impacts voter turnout. Observing the 2016 presidential election, I test this theory using geolocated voter data and a difference-in-differences design with matched groups. I find that pre-election police killings reduce voter turnout by 3 percentage points in the killings’ one-mile radius. Space and race matter. Police killings reduce Black voter turnout by 5.9 percentage points in the killings’ one-mile radius, but Black voters one to two miles away from the killings are unaffected. However, police killings do not affect White and Latino voter turnout regardless of the distance.

\
\
\
\

The Author(s) declare(s) that there is no conflict of interest.
 
  
\newpage

Many civil rights activists believed that the police killing of Michael Brown, an unarmed Black teenager, and the subsequent protests in Ferguson, Missouri, would propel a new civil rights movement targeted against a discriminatory and punitive criminal justice system (Martino-Taylor, 2016). In some ways, it was; the police killing of Michael Brown changed local politics in Ferguson, Missouri. Voter turnout increased in the subsequent local election, and the city council became more representative of the city's demographics. After the killing of Michael Brown, police killings of unarmed Black and brown men continued to fuel local protests, and some local policy victories like police-worn body cameras were achieved (Williamson et al., 2018; Levitz, 2016). However, the political consequences of police violence remain poorly understood (Soss \& Weaver, 2017). 

This paper argues that living near a pre-election police killing reduces people's likelihood of voting. Most police killings are hyperlocal events; they receive little media coverage, and local residents are more likely to know about and be psychologically impacted by nearby killings (Bor et al., 2018; Ang, 2020; Branton et al., 2021). Seemingly unjust and aggressive policing practices, like police violence, may mobilize or demobilize depending on the context (Weaver \& Lerman, 2010; Walker, 2014; White, 2019A). However, research studying the neighborhood and contextual effects of policing generally suggest that aggressive and violent policing demobilizes entire communities (Burch, 2013; Kang \& Dawes, 2017; Branton et al., 2021; for exceptional cases, *see* Laniyonu, 2019). Specifically, proximity to police violence is linked to lower trust in government and diminished external political efficacy (Silva et al., 2020; Branton et al., 2021). In turn, less trust in government and external efficacy represses turnout (Hooghe, 2017; Finkel, 1985). I further argue that police killings will be particularly demobilizing for Black voters because local police killings dampen Black Americans' political efficacy more than other racial groups' (Branton et al., 2021). 

This paper leverages state voter files and comprehensive data from Mapping Police Violence to study how police killings affect voter participation rates. Of particular interest are the spatial relationship between police killings and voters and the contextual circumstances that may mediate voters' reactions to the killings, such as voters' race and ethnicity and the victim's armed status. This paper tests whether voters living in places with a history of protests against police violence behave differently than those living in places without a history of protests against police violence. Police killings sometimes lead to local protests against police violence and these protests are linked to increased voter mobilization, potentially reversing police killings' demobilizing effects (Williamson et al., 2018; Enos et al., 2019).

Synthesizing research designs employed by Burch (2013), White (2019A), and Ang (2020), this paper studies how pre-election police killings in California, Florida, and Ohio affected the participation rates of spatially proximal voters in the 2016 general election. It does so by comparing the participation rates of active registered voters living within a mile of a police killing occurring before the 2016 general election to the participation rates of active registered voters living within a mile of a police killing occurring after the 2016 general election using a difference-in-differences (DiD) design. This research design controls for time-invariant and national time-variant confounds, jointly leveraging the high causal inference of a quasi-experiment and a DiD, while providing individual-level data within spatially defined neighborhoods. 

I find that voters living within a mile of a pre-election police killings were 3 percentage points less likely to vote than those in the control group. Police killings were particularly demobilizing when voters lived in closer proximity to a killing, but generally had no effect on voters living more than a mile away from the events. The effect of spatial distance between one's home and a killing appears to be continuous and robust. Furthermore, the findings suggest that race matters. Police killings particularly demobilize Black voters, and police killings of Black victims are more demobilizing than police killings of White and Latino victims. Victims' armed status does not appear to matter, and voters in cities with more Black Lives Matter protests prior to the killings were equally impacted.

This paper contributes to the literature on policing and contextual factors shaping voting behavior by studying the effects of proximal police violence on voter turnout, a plausible but untested source of variation in voter participation rates. While the effects found in this study are small on aggregate because police killings are relatively rare and the effects are localized, the findings help inform our understanding of the impact of police violence on voter behavior. Lethal police violence demobilized communities and increased racial inequities in the 2016 presidential election. While police killings are relatively rare, other forms of police violence are far more common. This research may help us think about the consequences of non-lethal violence. Furthermore, while this study focuses on spatial proximity as a source of exposure, other forms of exposure may produce similar effects on populations at further distances. 
 
 
## Contextual Effects and Local Focusing Events

Political scientists are increasingly attuned to the fact that salient and spatially proximal events cause changes in mass political behavior (Cho \& Gimpel, 2012; Velez \& Martin, 2013; Bishop, 2014; Enos, 2016). Spatial proximity to violent events appears to be politically transformative. For example, Newman and Hartman (2017) find that spatial proximity to mass shootings increases support for restrictive gun control policies, while Garcia-Montoya, Arjona, and Lacomb (2021) find that school shootings increase local support for Democratic candidates but do not impact voter turnout.\footnote{Simillarly, Hassell et al. (2020) find that school shootings do not affect voter turnout rates in their respective counties but they use a less restrictive definition of school shootings.} 

Persistent violence is associated with lower levels of political participation. While early research on criminal violence suggests that personal victimization is associated with a higher propensity to vote (Bateson, 2012), scholars have recently linked neighborhood criminal violence to voter disenfranchisement (Trelles \& Carreras, 2012). Using longitudinal data from Mexico, Trelles and Carreras (2012) find that an increase in the local homicide rate is associated with a decrease in voter participation rates. They argue that voters who experience greater levels of criminal violence in their proximity have lower satisfaction with local political institutions and democratic practices (Fernandez \& Kuenzi, 2010; Carreras, 2013), which in turn leads to lower levels of electoral participation. Similarly, various scholars find that fear of political violence in developing countries demobilizes voters (Bratton, 2008). In general, research on the effects of local violent events suggests that they have important spatial components, though the effects appear to be localized to smaller geographic units. 

Police violence may have different repercussions on  political behavior than criminal violence, however. Yet, a broad array of scholarship suggests that residential proximity to police violence causes various detrimental psychological effects. Scholars find that proximal police shootings affect mental health, school performance, and crime reporting (Bor et al., 2018; Ang, 2020; Desmond et al., 2016). Far from causing small behavior changes, their substantive effects have important implications for many outcomes we care about as social scientists. For example, Ang (2020) finds that students living within half a mile of a police shooting during 9th grade were 3.5 percent less likely to graduate from high school and 2.5 percent less likely to attend college. Related scholarship also finds that police violence and perceived injustice aggravate attitudes towards law enforcement. Desmond, Papachristos, and Kirk (2016) find that following the police beating of Frank Jude, an African American male in Milwaukee, Wisconsin, city residents, particularly Black residents, were less likely to report crimes relative to the pre-treatment control group.\footnote{However, Desmond, Papachristos, and Kirk's (2016) findings have been challenged by Zoorob (2020), who argues that their findings were driven by an outlier, leading to a stimulating debate in American Sociological Review. \textit{See} Desmond, Papachristos, and Kirk (2020) for their response.}


## Police and Anti-Democratic Political Socialization

Research on police violence further suggests that negative interactions with law enforcement, particularly those perceived as violent or unjust reduce trust in policing (Weitzer \& Tuch, 2004; Nadal et al., 2017; Brunson \& Miller, 2005; Mullinix et al., 2020). For example, Weitzer and Tuch (2004) find that "personal and vicarious experiences with police misconduct" were correlated with negative perceptions of law enforcement (p. 319). Negative perceptions of law enforcement may translate to negative perceptions of government generally. Lipsky (1980) argues that street-level bureaucrats function as policymakers. Their policy-making power stems from the discretion their respective institutions allow them (Lipsky, 1980, pp. 13-16). Law enforcement officials have wide discretion in whom they stop, detain, arrest, and how much force they use to do so (Goldstein, 1963). The use of force can be understood as a 'policy decision.' Policies can teach citizens political lessons about the function of government, citizens' relationship to the state, political efficacy, and de-facto civil rights (Mettler \& Soss, 2002). Citizens perceive police behavior, judge their decisions, and learn political lessons conditional on their judgment.

In a seminal paper on political learning through policy feedback effects, Soss (1999) finds that welfare recipients' negative experiences with welfare agents dampen recipients' political efficacy and trust in government. Lower political efficacy and trust in government lead to lower political participation. Much like poor experiences with welfare offices teach clients political lessons that are antagonistic to democratic ideals, police officers' treatment of citizens can potentially teach political lessons that influence civic participation. Lerman and Weaver (2014) find that all levels of criminal justice contact attenuate civic participation. They argue that "citizens who have adversarial interactions with law enforcement become less likely to seek out government of any kind," believing it is something to be avoided (Weaver \& Lerman, 2010). Both trust in government and political efficacy are central to Weaver and Lerman's (2010) theoretical mechanism. Mediation analysis by Davis (2020) supports their theory. 

Lerman and Weaver's (2010; 2014) research focuses on individuals who experience direct contact with law enforcement and carceral agents. However, some research suggests that *proximal* experiences with the carceral state may actually increase political participation (Walker, 2014; White, 2019A; White, 2019B).\footnote{Walker (2014) defines proximal contact as "individuals who have not had personal contact with the criminal justice system but who have had indirect contact [through their social networks]."} Walker (2014) argues that individuals whom only experience "proximal contact" with the criminal justice system do not suffer the same consequences as people with personal contact. For example, personal contact potentially leads to a conviction record that can increase social stigma and lower earning capacity. Since these factors are relevant to participation, they may decrease voter turnout through a mechanism possibly irrelevant in proximal contact. Instead, she argues that "when moments of personal contact are seen as unjust, this can lead to increased participation in politics around criminal justice issues."  

However, spatially proximal police killings do not constitute the same relationship as the "proximal contact" studied by Walker (2014). Studies investigating contextual and neighborhood effects generally suggest that aggressive policing practices demobilize the communities in which they take place (Burch, 2013; Kang \& Dawes, 2017; Laniyonu, 2019).\footnote{The contextual effects of policing are not always demobilizing. For example, Laniyonu (2019) finds that stop-and-frisk policies in New York City have heterogeneous effects on voter turnout depending on the contextual factors of the election. A greater concentration of police stops at the neighborhood level was associated with lower turnout in the 2006 and 2010 midterm elections. Yet, the same policing practices were associated with greater turnout in the 2008 presidential election and 2013 mayoral election. Laniyonu (2019) attributed the increased turnout in the 2008 election to an Obama effect and the increased turnout in the 2013 mayoral election to the significance of that election in reforming Stop-and-Frisk policies.} Branton, Carey, and Martinez-Ebers (2021) find that people living in zip codes with more police killings have lower political efficacy even when including a broad series of individual and contextual controls. Silva et al.(2020) find that police killings also reduce local residents' trust in government. Lower political efficacy and trust in government are likely to demobilize voters (Davis, 2020; Hooghe, 2017; Finkel, 1985).

In summary, this research suggests that those living closer to a police killing are more likely to be psychologically affected by the event. If voters perceive the killing as unjust, they may learn political lessons antagonistic to democratic participation, trusting government less and feeling less politically efficacious. In turn, less trust in government and less political efficacy lead to lower voter participation rates. Jointly, this research suggests that proximity to pre-election police killings will demobilize voters, promoting the following hypothesis:

\begin{itemize}

\item Hypothesis 1: Police killings reduce proximal voters' likelihood to vote.

\end{itemize}

## Heterogeneous Effects: Race, Armed status, and Protests

Much of the research cited above points to potential heterogeneity. Voters' pre-existing perceptions of police and a police killing's contextual factors may mediate whether voters perceive lethal force as justified, shaping its impact on voters' trust in government and political efficacy.

Black citizens are significantly more likely to be victims of police violence than Whites, even after controlling for criminality (Dunn et al., 2019; Scott et al., 2017; Morin & Stepler, 2016). In turn, Black citizens are less likely to trust law enforcement (Miller et al., 2004; Morin & Stepler, 2016). Brunson and Miller (2005) find that young Black men in poor urban communities viewed the police as harassing and ineffective at reducing crime, regardless of whether the respondent was engaged in delinquent activity or contacted by police. Therefore, Black Americans are more likely than White Americans to view a police killing as unjustified.

These racialized reactions to police killings are empirically visible. For example, Ang (2020) finds that police shootings are correlated with worse school performance only for students of color, particularly when a co-racial and co-ethnic victim is killed. Similarly, Bor et al. (2018) find that police shootings of Black victims dampen mental health for proximal Black residents. However, police shootings do not affect White state residents' mental health irrespective of the victim's race. Branton, Carey, and Martinez-Ebers (2021) find that only Black survey respondents' political efficacy was affected by local police killings. White and Latino respondents' political efficacy was unaffected by the number of neighborhood police killings. This research suggests that Black voters are more likely to see a police killing as unjustified and be psychologically impacted by them, motivating the following hypothesis:

\begin{itemize}

\item  Hypothesis 2: A police killing will have a stronger \textit{demobilizing} effect on Black voters than on White voters.

\end{itemize}

Victims' armed status may also shape perceptions of police killings as justified or not.\footnote{Victims' reported armed status, while sometimes questioned by members of the public, is one shortcut the public may use to determine the justifiability of a shooting.} Williamson, Trump, and Einstein (2018) find that Black Lives Matter protests occurred in 24\% of cities with at least one police shooting during the period of observation. However, protests occurred in 40\% of cities with at least one unarmed death. While in that case, less justified police shootings were mobilizing, that may not always be the case. Ang (2020) finds that shootings of unarmed victims had stronger negative consequences on school performance for students living in proximity than police killings of armed victims. Police killings of unarmed suspects are more likely to be seen as unjustified than police killings of armed suspects. In turn, voters are less likely to trust government after a police killing of an unarmed victim, suggesting an additional hypothesis:

\begin{itemize}

\item Hypothesis 3: A police killing of an unarmed suspect will have a stronger \textit{demobilizing} effect on voter turnout than a police killing of an armed suspect.

\end{itemize}

Williamson, Trump, and Einstein (2018) find that police killings of Black victims predict the location of Black Lives Matter protests and locations with one Black Lives Matter protest were more likely to have subsequent protests. Research suggests that protests against police violence increase local voter participation (Enos et al., 2019). This may be because protests spill over into political mobilization through other means. If this is the case, police killings may actually increase voter turnout if followed by protests. Institutions that organize protests against police use of force might also organize local residents to vote after a police killing. These organizations are more likely to cement themselves as local mobilizing institutions through consistent collective action. Furthermore, participating in protests may directly lead to higher turnout for attendees. Evidence suggests that participating in Tea Party protests increased attendees' likelihood to vote (Madestam et al., 2013). If local residents participate in protests aimed at reforming policing, they may feel more politically efficacious after a local police killing. Jointly, this research offers one additional hypothesis: 

\begin{itemize}

\item Hypothesis 4: A police killing in a community with more protests against police violence will be less \textit{demobilizing}  than a police killing in a community with fewer protests against police violence.

\end{itemize}

# Data and Methods

The primary research design uses a linear probability difference-in-differences (DiD) model with matched groups.\footnote{I use linear probability models instead of logit models in all regressions in the main text to facilitate the interpretability of results, particularly the interpretation of interaction terms. Interaction terms in nonlinear models are not easily interpretable (Ai \& Norton, 2003). Therefore, the difference-in-differences coefficient, an interaction of the time period and treatment condition, is more difficult to interpret using a logit difference-in-differences model compared to a linear probability difference-in-differences model. However, the results are robust to the use of logit difference-in-differences models. Results are presented in Appendix A.} This paper adapts a research design used by Burch (2013; also, \textit{see} White 2019A) to match a treatment and control group. Assuming short-term temporal consistency in the determinants of police killings, this design helps control for endogeneity by only comparing individuals living in similar neighborhoods. I set up a quasi-experiment leveraging the variation in the timing of police killings. I compare individuals who experienced a police killing in their neighborhoods within the six months before the 2016 election (treatment group) to those who experienced an police killing in their neighborhoods in the six months following the 2016 election (control group). This method controls for the type of neighborhood that police killings occur in by only comparing individuals who live in places where they happened. This method assumes that the timing of an election is exogenous to the timing of police killings. Whether an police killing occurs before or after an election is essentially random. By comparing only individuals in neighborhoods where an police killing occurred, I compare neighborhoods that should be similar on observable and unobservable characteristics. Therefore, possible confounding variables like crime, poverty, and police-community relations are ruled out by design. The assumption of equivalency across groups is supported by comparison tables included in the supplemental material (See Appendix B, Appendix C, and Appendix D).

Further steps are taken to rule out confounds by exploiting the longitudinal nature of the data, comparing changes in turnout rates between 2012 and 2016. This research design eliminates time-invariant and national time-variant confounds. Therefore, factors specific to the 2016 election should not affect the results.\footnote{In the cross-sectional analysis, I include individual-level controls for party identification, age, 2012 voter turnout, predicted ethnorace, and state of residence to reduce potential sources of bias.} Given the difference-in-differences design of matched groups, we should only see turnout effects related to the use of lethal force in voters that experienced a police killing in their proximity before the 2016 election. By analyzing changes at the individual level, we overcome complex methodological issues related to aggregation and ecological fallacies, linking neighborhood effects to individual-level outcomes.

Our primary independent variable is the location and timing of an police killing; more specifically, if someone experienced a police killing within a mile of their home in the six months before the 2016 general election. Robust data collection efforts on police killings began in 2015, making 2016 the first general election where this test is possible. I use data from Mapping Police Violence, a non-profit crowd-sourced dataset that aggregates data from media outlets and other non-profits like \textit{The Washington Post}, Fatal Encounters, and Killed by Police.\footnote{I conducted verification checks on a subset of the data to ensure validity. While some police killings may be missing, verification checks suggest that none of the incidents included were fabricated. The data used in the bulk of the analysis was confirmed by the \textit{Washington Post}.}

My dependent variable is individual voter turnout during the 2016 election. I use individual-level voter files from California, Florida, and Ohio to measure voter turnout.\footnote{Voter files are subsetted to voters labeled as "active" by the state to reduce the likelihood of untreated units.} \footnote{California and Florida's voter files were acquired in January 2017. Ohio's voter file was acquired in December 2018. The use of voter files to measure turnout may not account for changes in percieved turnout due to differential levels of voter registration. Furthermore, the late acquisition of the Ohio voter files may risk having an inaccurate "snap shot" of the 2016 electorate, which may bias results. However, pre-election voter registration rates are similar in the treatment and control groups. Furthermore, results are robust to the exclusion of Ohio voters. See Appendix E.} While the case selection is primarily based on data accessibility, the sample includes states representing different geographic regions (West, Midwest, and South) and political cultures, which helps improve the study's generalizability.

The coordinates of police killings and voters within these three states are geocoded.\footnote{I use the service provided by www.geocod.io to geocode police killings.} \footnote{Geocoded voter files for Florida and Ohio were generously provided by [temporally removed for review]. California voter files were geocoded using the StreetMaps database through ArcMap 10.6.1.} Geospatial measurement techniques are used to subset the data to voters living within a two-mile radius of a police killing.\footnote{While a police killing is more likely known to nearby residents than those living further away, I do not assume all nearby residents are treated with information on the killing. Some may never learn that a police killing occurred nearby. Particularly, nearby voters may not have time to learn about killings that happen in the days immediately before the election. Therefore, in experimental terms, this is an intention-to-treat (ITT) analysis, not a treatment-on-the-treated (TOT) analysis. Similarly, while I check for robustness when mitigating spillover effects, spillover effects are present in the primary analysis. Voters in the post-election killing group may also live near a pre-election killing or hear about one in a nearby neighborhood through the media, especially if they are within the same media market. Furthermore, migration patterns may also lead to spillover effects or the misclassifications of treated units. However, these potential issues should bias against finding statistically significant results, making the findings even more surprising.} 

I primarily study voters in a one-mile radius partially to align measurement strategies with past geo-spatial research on police killings (Ang, 2020 uses a half-mile radius).\footnote{Between 1 (Siskiyou County, CA) and 70,611 (San Francisco, CA) voters live within a one-mile radius around each police killings in this dataset, with a median of 6,680 voters.} However, a mile radius makes sense for other reasons as well. Police killings are often very localized events, as the vast majority are not mentioned in local newspapers (Ang, 2020, p.3). Years of segregation and sorting have made small geographic areas racially and economically homogeneous. Therefore, individuals within these communities are more likely to be directly affected by a nearby police killing. This is important because adding treated units into the control group is unlikely to bias estimates. However, including many untreated units in the treatment group may quickly dilute the treatment effect. Extending the spatial distance may also threaten the design. For example, it is impossible to implement the same design at the city or county level as many cities have police killings both before and after an election. A similar design at the city or county level would place all voters in those cities in both the treatment and control groups. The same would happen if we used much larger spatial distances. However, I compare voters living one to two miles away from a police killing and find that the effects are entirely diluted at that distance. The same is likely true at even further distances, so I do not investigate effects at the city or county level as the observed effects are no longer present at the one to two-mile range. 

According to Mapping Police Violence, police killed 1134 people between May 8th, 2016 and May 8th, 2017 (six months before and after the 2016 election). One thousand eighty-nine of those deaths can be attributed to the use of lethal force. This does not include deaths by "vehicle," which may result from unintentional automobile accidents. However, this does include deaths caused by tasers, strangulation, beatings, and other types of excessive force. The data suggests incidents of lethal force have been stable since 2014, showing temporal consistency in police killings. Two hundred eighty-five deaths occurred in the subset of states observed in this study. Two hundred seventy-seven are attributed to the use of lethal force.\footnote{This does not include eight police killings due to vehicle collisions and two deaths in custody which may not represent public displays of lethal force.} One hundred thirty-one incidents occurred on or before the 2016 election. Individuals living by those incidents constitute the treatment group. One hundred forty-six incidents occurred after the 2016 election. Individuals living by those incidents constitute the control group. One hundred nine victims were White, 64 Black, 78 Latino, nine Asian, two Native American, three Pacific Islander, and the ethnorace of the remaining 12 is unknown.\footnote{One hundred seventy-one police killings occurred in California, 73 in Florida, and 33 in Ohio.} \footnote{See Appendix B for a balance table comparing the police killings in the pre-election killing group to the killings in the post-election killing group .} Comparing victims' demographic characteristics and armed status suggests that they are mostly equivalent across the treatment and control groups.

Three police killings cannot be geocoded with enough statistical certainty to include in the study, leaving 274 police killings.\footnote{Various police killings are within two miles of each other creating geographic spillover. The killings are not remove because doing so potentially unbalances the groups and biases the sample of killings against urban neighborhoods. However, spillover effects bias in favor of null findings. The results are robust to the removal of overlapping pre-election and post-election police killings and suggest potentially stronger effects when these killings are removed. See Appendix F.} We use census tract information to compare the gender, age, and racial make-up of the pre-election and post-election killing census tracts.\footnote{A balance table for these census tracts is presented in Appendix D. However, census tracts do not align perfectly with the studied neighborhoods.} The demographic characteristics roughly compare across the neighborhoods in the treatment and control groups. 

Across California and Florida, the states where I was able to acquire limited data on the timing of municipal elections, 73 pre-election killings were in cities or towns with municipal elections during the 2016 general election and 79 post-election killings were in cities or towns with municipal elections during the 2016 general election suggesting that pre-election police killings are not more or less likely to occur in cities with a local candidate on the ballot.

I merge data tracking Black Lives Matter (BLM) protests at the city level from 2014 to 2015 collected by Williamson, Trump, and Einstein (2018). This data does not track protests in response to killings in the dataset because the killings included in this study happened after the protests. However, using protest data ex-ante police killings as a proxy for post-killing protests is essential for causal inference as including protests post-killings introduce biases associated with post-treatment controls (Montgomery et al., 2018). Furthermore, previous BLM protests predict future BLM protests in that city as relevant organizing and civic society institutions cement themselves in the community (Williamson et al., 2018). \footnote{Montgomery et al. (2018) suggest using pre-treatment moderators and controls or instrumental variables instead (p. 771). Protests against police violence are more likely to occur in cities that previously experienced protests against police violence (Williamson et al., 2018). Therefore, I chose to use pre-killing protests as a proxy for post-killing protests, avoiding potentially biasing causal estimates. It is important to note that Williamson, Trump, and Einstein (2018) find that BLM protests were only predicted by the death of Black police killing victims, not police killing victims in general.} \footnote{This dataset tracks what the scholars define as "Black Lives Matter" protests, not what they define as "protests against police violence." While the overlap between these types of protests is large, it may not be perfect. However, no dataset tracking protests against police violence prior to May 8th, 2016 exists based on my knowledge.} There were 82 BLM protests between 2014 to 2015 in cities in the pre-election killing group and 93 in cities in the post-election killing group.

Finally, the geocoded police killings data is merged with the geocoded voter files. The WRU package in R is used to predict the race of voters. Florida collects information on the race and ethnicity of voters in their voter registration forms. This information is available on their voter files allowing me to verify the validity of the measurement.\footnote{See Appendix G for a summary of the validation results comparing the predicted ethnoraces produced by the WRU package to the self-reported ethnoraces of voters in Florida and more information on the prediction methods.} 

Voters at the cluster level in the treatment and control groups are compared based on the information available in their respective voter files and their predicted ethnorace.\footnote{I compare voters at the cluster level because standard errors are clustered in the statistical analysis.} \footnote{See Appendix C for a balance table of voter clusters.} Groups are similar across demographic and partisan characteristics.

```{r setup, include=FALSE}
knitr::opts_chunk$set(warning=FALSE, message=FALSE, cache=F, autodep=T, echo=FALSE)

#install libraries
list.of.packages <- c("knitr" , 
                      "tidyverse" , 
                      "readr" , 
                      "ggplot2" , 
                      "stargazer" , 
                      "labelled",
                      "RCurl",
                      "miceadds",
                      "clusterSEs",
                      "gridExtra",
                      "data.table",
                      "dotwhisker",
                      "ggeffects",
                      "compareGroups",
                      "cowplot")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

#Libraries used
library(readr)
library(tidyverse)
library(xtable)
library(stargazer)
library(labelled)
library(RCurl)
library(miceadds)
library(clusterSEs)
library(gridExtra)
library(data.table)
library(dotwhisker)
library(ggeffects)
library(compareGroups)
library(cowplot)

#Get legend command
get_legend<-function(myggplot){
  tmp <- ggplot_gtable(ggplot_build(myggplot))
  leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
  legend <- tmp$grobs[[leg]]
  return(legend)
}
```



# Findings
Here, I compare changes in voter turnout between the 2012 general presidential election and the 2016 general presidential election for the pre-election killing group and the post-election killing (control) group.

First, I provide support for the parallel trends assumption crucial to standard DiD designs. Figure 1.1 models the average voter turnout rates of the pre-election killing group and the post-election killing group between 2008 and 2016.\footnote{Florida's voter history file only records election turnout tracking back to 2006. Therefore, I am unable to model previous turnout rates for general presidential elections.} \footnote{I test for pre-exposure parallel trends more formally using a linear probability model in Appendix G.} The parallel trends assumption is well supported in all cases by pre-treatment trends. Voter turnout rates increase for both the pre-election killing group and the post-election killing group between 2008 and 2012. While voter turnout rates increase slightly more for the post-election killing group (by 0.4 percentage points), the difference is minimal, not statistically significant, and the parallel trends assumption is well supported. Figure 1.2 through Figure 1.4 model the same trends disaggregated by voters' race. In all cases, the pre-election killing group and the post-election killing group trends between 2008 and 2012 are nearly symmetrical and support the parallel trends assumption. 

```{r , results = 'hide'}
final_data <- fread("ps_final_data_2021_trimmed.csv")


dif_gen <- final_data %>%
  subset(distance <= 1) %>%
  group_by(treatment_dummy) %>%
  summarise(turnout_2008 = mean(turnout_2008_voter),
            turnout_2012 = mean(turnout_2012_voter),
            turnout_2016 = mean(turnout_2016_voter)) %>%
  gather("year", "average_turnout", 2:4)

dif_gen$year <- as.integer(gsub("turnout_", "", dif_gen$year))
dif_gen$treatment_dummy <- ifelse(dif_gen$treatment_dummy==1, "Pre-election", "Post-election")

m1 <- ggplot(dif_gen, aes(x=year, y=average_turnout, color=treatment_dummy, group = treatment_dummy)) + 
  geom_line() + 
  geom_point(aes(shape=as.factor(treatment_dummy))) +
  labs(subtitle="1.1: All Voters", x = "", y = "") + 
  scale_color_grey(name="", start = .7, end = .3) +
  scale_shape_discrete(name="") +
  theme(legend.position = "top", legend.title = element_blank(),legend.background = element_blank(),
        legend.box.background = element_rect(colour = "black")) +
  theme(plot.title = element_text(size=12),axis.text=element_text(size=7)) +
  scale_y_continuous(limits = c(.45, .75)) + theme(
  panel.background = element_rect(fill = "white",
                                colour = "black",
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.2, linetype = 'solid',
                                colour = "grey90"), 
  panel.grid.minor = element_line(size = 0.2, linetype = 'solid',
                                colour = "grey90")
  )

dif_race <- final_data %>%
  subset(distance <= 1) %>%
  group_by(treatment_dummy, race_wru_voter) %>%
  summarise(turnout_2008 = mean(turnout_2008_voter),
            turnout_2012 = mean(turnout_2012_voter),
            turnout_2016 = mean(turnout_2016_voter)) %>%
  gather("year", "average_turnout", 3:5) 

dif_race <- subset(dif_race, race_wru_voter  %in% c("black", "white", "hispanic"))

dif_race$year <- as.integer(gsub("turnout_", "", dif_race$year))
dif_race$treatment_dummy <- ifelse(dif_race$treatment_dummy==1, "Pre-election killing", "Post-election killing (Control)")

m3 <- ggplot(subset(dif_race, race_wru_voter=="black"), aes(x=year, y=average_turnout, color=treatment_dummy, group = treatment_dummy)) + 
  geom_line() + 
  geom_point(aes(shape=as.factor(treatment_dummy))) +
  labs(subtitle="1.3: Black Voters Only", x = "", y = "", color = "") + 
  guides(color=FALSE) +
  theme(plot.title = element_text(size=12),axis.text=element_text(size=7)) +
  scale_y_continuous(limits = c(.35, .65)) + 
  scale_color_grey(name="", start = .7, end = .3) +
  scale_shape_discrete(name="") +
  theme(legend.position = "none",
  panel.background = element_rect(fill = "white",
                                colour = "black",
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.2, linetype = 'solid',
                                colour = "grey90"), 
  panel.grid.minor = element_line(size = 0.2, linetype = 'solid',
                                colour = "grey90")
  )

m2 <- ggplot(subset(dif_race, race_wru_voter=="white"), aes(x=year, y=average_turnout, color=treatment_dummy, group = treatment_dummy)) + 
  geom_line() + 
  geom_point(aes(shape=as.factor(treatment_dummy))) +
  labs(title="1.2: White Voters Only", x = "", y = "", color = "") + 
  guides(color=FALSE) + 
  theme(plot.title = element_text(size=12),axis.text=element_text(size=7)) +
  scale_y_continuous(limits = c(.47, .77)) + 
  scale_color_grey(name="", start = .7, end = .3) +
  scale_shape_discrete(name="") +
  theme(legend.position = "none",
  panel.background = element_rect(fill = "white",
                                colour = "black",
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.2, linetype = 'solid',
                                colour = "grey90"), 
  panel.grid.minor = element_line(size = 0.2, linetype = 'solid',
                                colour = "grey90")
  )

m4 <- ggplot(subset(dif_race, race_wru_voter=="hispanic"), aes(x=year, y=average_turnout, color=treatment_dummy, group = treatment_dummy)) + 
  geom_line() + 
  geom_point(aes(shape=as.factor(treatment_dummy))) +
  labs(subtitle="1.4: Latino Voters Only", x = "", y = "", color = "") + 
  guides(color=FALSE) + 
  theme(plot.title = element_text(size=12),axis.text=element_text(size=7)) +
  scale_y_continuous(limits = c(.35, .65)) + 
  scale_color_grey(name="", start = .7, end = .3) +
  scale_shape_discrete(name="") +
  theme(legend.position = "none",
  panel.background = element_rect(fill = "white",
                                colour = "black",
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.2, linetype = 'solid',
                                colour = "grey90"), 
  panel.grid.minor = element_line(size = 0.2, linetype = 'solid',
                                colour = "grey90")
  )


legend <- get_legend(m1)

m1 <- m1 + theme(legend.position="none")
```

```{r, fig.asp = 1.8, fig.align = "center"}
grid.arrange(legend, m1,m2, m3, m4, nrow = 3, ncol = 2,
             top="Figure 1: Parallel Trends by Voter's Race and Ethnicity",
             bottom="Year",
             left="Turnout of Registered Voters", 
             layout_matrix = rbind(c(1,1), c(2,3), c(4,5)),
             widths = c(3, 3), heights = c(0.2, 3, 3))
```
\newpage

Figure 2 presents the results for the difference-in-differences analysis using a linear probability model, with the data disaggregated by voters' race and ethnicity using cluster-robust standard errors.\footnote{Standard errors are clustered at each killing because of the clustered nature of the design. Nature is randomly assigning the treatment, proximity to a lethal police killing before the 2016 election, to a cluster of people based on their geographic residential location. In other words, the quasi-randomization of treatment does not occur at the individual level. Instead, the randomization process is aggregated up to the [spatially defined] neighborhood levels meaning that the error among individuals within each cluster will be correlated.} \footnote{The tables underlying Figure 2 are presented in Appendix I.} The analysis supports \textbf{Hypotheses 1} and \textbf{2}. The \textit{Time} coefficients estimate the effect of time on voter turnout. The models suggest that voter turnout rates have increased over time for both the pre-election killing group and the post-election killing (control) group (largely due to the nature of voter files). The \textit{Pre-election killing Group} coefficient represents the difference in voter turnout rates between the pre-election killing group and the post-election killing group in 2012. The coefficients are not statistically significant in any of the models suggesting the groups had similar voter turnout rates in 2012 and did not have pre-existing differences prior to the police killings. The \textit{Difference-in-differences} coefficients in Figure 2 are the difference-in-differences estimators and the coefficients of interest within this set of models. They estimate the effect of a pre-election killing on 2016 voter turnout relative to the control group. Model 1 in Figure 2 suggests that a pre-election police killing reduces one's likelihood of voting by 3 percentage points if they live within a mile of the killing (p=0.02). This finding can be interpreted as 3 percentage point reduction in turnout on aggregate. If we disaggregate the data based on voters' race, the difference-in-differences analysis suggests that police killings do not impact proximal White and Latino voters. Neither DiD coefficient is statistically significant nor do they suggest substantially large effects. On the other hand, the DiD analysis predicts that police killings reduce nearby Black voter turnout by about 5.9 percentage points (p<0.01). \textbf{Hypothesis 2} is strongly supported when we compare the \textit{Difference-in-differences} coefficient in Models 2 and 3 in Figure 2. Police killings have strong demobilizing effects for proximal Black voters while police killings have no statistically distinguishable effect on White voters' participation rates. Perhaps surprisingly, police killings do not impact the participation rates of nearby Latino voters even when the victim is Latino.\footnote{See Appendix J.}

These findings have important implications for political equity and compound the already disenfranchising effects of race. Robustness checks suggest that police killings of Black victims are particularly demobilizing, reducing voter turnout by over 6.7 percentage points in their one-mile radius. Police killings of White and Latino victims do not have a statistically significant effect on proximal voter turnout.\footnote{See Appendix J.} It is unclear whether Black voters are more demobilized by police killings because they are more likely to live near a police killing of a Black victim or because Black voters interpret police killings differently, irrespective of the victims' race and ethnicity. Black voters do not appear to react differently to police killings of co-ethnics compared to killings of non-co-ethnics.\footnote{See Appendix J.} 




```{r , results = 'hide'}
#Subsetting
final_data <- final_data %>%
  filter(distance <=1 ) 

did_data <- select(final_data, c(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter)) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)


did_data <- subset(did_data, year != 2008)


did_data$race_wru_voter <- dplyr::recode(did_data$race_wru_voter, "black"="Black Voters", "white"="White Voters", "hispanic"="Latino Voters")
race_sub <- c("Black Voters", "White Voters", "Latino Voters")



m1 <- did_data  %>% 
  do(tidy(lm( data = ., turnout ~ as.factor(year) + treatment_dummy + did))) %>%
  mutate(std.error =
    as.data.frame(summary(lm.cluster( 
      data = did_data, turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting")))$`Std. Error`) %>%
   relabel_predictors(c('as.factor(year)2016' = "Time",                      
                     treatment_dummy = "Pre-election Killing Group",          
                     did = "Difference-in-differences"))
m1$model <- "All Voters"

#Dist by race       
se <- did_data %>% 
    group_by(race_wru_voter) %>%
    subset(race_wru_voter %in% race_sub) %>%
    do(as.data.frame(summary(lm.cluster( 
      data = ., turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))))
           
models <- did_data %>% 
    group_by(race_wru_voter) %>%
    subset(race_wru_voter %in% race_sub) %>%
    do(tidy(lm( data = ., turnout ~ as.factor(year) + treatment_dummy + did)))  %>%
    relabel_predictors(c('as.factor(year)2016' = "Time",                      
                     treatment_dummy = "Pre-election Killing Group",          
                     did = "Difference-in-differences")) %>%
  ungroup()%>%
  arrange(race_wru_voter, term)

models$std.error <- se$`Std. Error`[c(2:4,1,6:8,5,10:12,9)]
      

colnames(models)[1] <- "model"
models <- rbind(m1, models)

```

```{r, results = 'asis', fig.align='left'}
dwplot(models, 
       vline = geom_vline(xintercept = 0, colour = "grey60", linetype = 2)) + # plot line at zero _behind_ coefs
    theme_bw() + xlab("Coefficient Estimate") + ylab("") +
    ggtitle("Figure 2: The Effect of A Pre-election Police Killing\nWithin 1 Mile of Voters on Voter Turnout") +
    theme(plot.title = element_text(size=12),
          legend.position = c(0.01, 0.6),
          legend.justification = c(0, 0),
          legend.background = element_rect(colour="grey80"),
          legend.title.align = .5) +
  scale_colour_grey(start = .2, end = .8)
```


## The Role of Space

The distance between voters and pre-election police killings is a crucial part of the causal mechanism proposed in this study. If the distance between voters and police killings truly mediates the effect of police killings on voter turnout, one might expect that voters living closer to pre-election police killings are more affected by them than those living further away. 

Aggregated data suggest that spatial proximity to police killings matters. Figure 3 compares the average turnout for the pre-election killing (treatment) and post-election killing (control) groups by race at 0.1-mile intervals from their associated police killing. Demographic and contextual covariates associated with the location of a police killing, like poverty and crime, are likely negatively correlated with voter turnout. However, it is important to remember that those factors are controlled for by the quasi-experimental design, which only compares neighborhoods with a police killing to each other. If the null hypothesis is correct and spatial proximity to a pre-election police killing is not associated with voter participation rates, we should expect equal levels of participation within distance intervals for the pre-election and post-election killing groups.In other words, if pre-election police killings have an independent effect on voter turnout, then the slopes of the lines should be different. Yet, Figure 3.1 suggests that voters who experienced a police killing within 0.1 miles of their home before the 2016 presidential election were about 4-percentage points less likely to vote on average compared to their counterparts who experienced a police killing at the same distance after the election. Voters living further away appear less affected by pre-election killings when compared to their control counterparts. Turnout rates for the pre-election killing (treatment) and post-election killing (control) groups begin to overlap around the 1.8-mile interval. 

Voters' race and ethnicity continues to matter. For example, we see different patterns if we compare Figure 3.2, which models White voter turnout, to Figure 3.3, which models Black voter turnout. Figure 3.2 suggests that White voters living within 0.1 miles of a pre-election police killing are about 1 percentage points less likely to vote than their control counterparts. The difference is small and about the same when we observe White voters living two miles away from police killings, suggesting that proximity to pre-election police killings has no impact on White voters. On the other hand, Figure 3.3 suggests that Black voters living 0.1 miles away from a pre-election police killing are about 8 percentage points less likely to vote than their control counterparts. We see similar though weaker patterns for Latino voters. Latino voters living within 0.1 miles of a pre-election police killing are about 3 percentage points less likely to vote compared to their respective control group. For both Black and Latino voters, distance from a post-election police killing is not associated with differences in voter turnout even through the influence of covariates. However, proximity to a pre-election police killing is negatively associated with voter turnout. While Black voters living 0.1 miles or less away from a police killing were 8 percentage points less likely to vote than their control counterparts, distance depreciates the effects until turnout among the pre- and post-election killing groups are statistically indistinguishable at about the 1.5-mile range. Similarly, Latino voters living further away from pre-election police killings appear less demobilized, behaving more like their control counterparts.

\newpage
```{r}
final_data <- fread("ps_final_data_2021_trimmed.csv")
```


```{r results='hide'}
#All voters
agg <- final_data %>%
  mutate(int = as.numeric(cut(distance, breaks = 20))/10) %>%
  group_by(int, treatment_dummy) %>%
  summarize(turnout = mean(turnout_2016_voter, na.rm=T)) %>%
  filter(!is.na(int))



g1 <- ggplot(agg, aes(x=int, y=turnout, shape=as.factor(treatment_dummy), color= as.factor(treatment_dummy))) + 
  geom_point() + 
  geom_smooth(method = "lm") + 
  labs(x = "", y="", subtitle = "3.1 All Voters") + 
  scale_color_grey(name="", labels=c("Post-election Killing", "Pre-election Killing") , start = .7, end = .3) +
  scale_shape_discrete(name="", labels=c("Post-election Killing", "Pre-election Killing")) +
  scale_y_continuous(limits = c(.59, .8)) +
  theme(legend.position = "top",
        axis.text = element_text(size = rel(0.8)),
         axis.ticks = element_line(colour = "black"),
         legend.key = element_rect(colour = "grey80"),
         panel.background = element_rect(fill = "white", colour = NA),
         panel.border = element_rect(fill = NA, colour = "grey50"),
         panel.grid.major = element_line(colour = "grey90", size = 0.2),
         panel.grid.minor = element_line(colour = "grey90", size = 0.5),
         strip.background = element_rect(fill = "grey80", colour = "grey50"),
        legend.key.height= unit(.4, 'cm')) 

#Whiter Voters
agg <- final_data %>%
  filter(race_wru_voter=="white") %>%
  mutate(int = as.numeric(cut(distance, breaks = 20))/10) %>%
  group_by(int, treatment_dummy) %>%
  summarize(turnout = mean(turnout_2016_voter, na.rm=T)) %>%
  filter(!is.na(int))

g2 <- ggplot(agg, aes(x=int, y=turnout, color= as.factor(treatment_dummy))) + 
  geom_point(aes(shape=as.factor(treatment_dummy))) + geom_smooth(method = "lm") + 
  labs(x = "", y="",  subtitle = "3.2 White Voters Only") + 
  scale_color_grey(name="",labels=c("Post-election\nKilling", "Pre-election\nKilling"), start = .7, end = .3)+
   scale_shape_discrete(name="",labels=c("Post-election Killing", "Pre-election Killing")) +
  scale_y_continuous(limits = c(.64, .85)) +
  theme(legend.position = "none",
        axis.text = element_text(size = rel(0.8)),
         axis.ticks = element_line(colour = "black"),
         legend.key = element_rect(colour = "grey80"),
         panel.background = element_rect(fill = "white", colour = NA),
         panel.border = element_rect(fill = NA, colour = "grey50"),
         panel.grid.major = element_line(colour = "grey90", size = 0.2),
         panel.grid.minor = element_line(colour = "grey90", size = 0.5),
         strip.background = element_rect(fill = "grey80", colour = "grey50"),
        legend.key.height= unit(.4, 'cm')) 

#Black Voters
agg <- final_data %>%
  filter(race_wru_voter=="black") %>%
  mutate(int = as.numeric(cut(distance, breaks = 20))/10) %>%
  group_by(int, treatment_dummy) %>%
  summarize(turnout = mean(turnout_2016_voter, na.rm=T)) %>%
  filter(!is.na(int))

g3 <- ggplot(agg, aes(x=int, y=turnout, color= as.factor(treatment_dummy))) + 
  geom_point(aes(shape=as.factor(treatment_dummy))) + geom_smooth(method = "lm") + 
  labs(x = "", y="", subtitle = "3.3 Black Voters Only") + 
  scale_y_continuous(limits = c(.49, .7)) +
  scale_color_grey(name="",labels=c("Post-election\nKilling", "Pre-election\nKilling"), start = .7, end = .3)+
   scale_shape_discrete(name="",labels=c("Post-election Killing", "Pre-election Killing")) +
  theme(legend.position = "none",
        axis.text = element_text(size = rel(0.8)),
         axis.ticks = element_line(colour = "black"),
         legend.key = element_rect(colour = "grey80"),
         panel.background = element_rect(fill = "white", colour = NA),
         panel.border = element_rect(fill = NA, colour = "grey50"),
         panel.grid.major = element_line(colour = "grey90", size = 0.2),
         panel.grid.minor = element_line(colour = "grey90", size = 0.5),
         strip.background = element_rect(fill = "grey80", colour = "grey50"),
        legend.key.height= unit(.4, 'cm')) 

#Latino Voters
agg <- final_data %>%
  filter(race_wru_voter=="hispanic") %>%
  mutate(int = as.numeric(cut(distance, breaks = 20))/10) %>%
  group_by(int, treatment_dummy) %>%
  summarize(turnout = mean(turnout_2016_voter, na.rm=T)) %>%
  filter(!is.na(int))

g4 <- ggplot(agg, aes(x=int, y=turnout, color= as.factor(treatment_dummy))) + 
  geom_point(aes(shape=as.factor(treatment_dummy))) + 
  geom_smooth(method = "lm") + 
  labs(x = "", y="", subtitle = "3.4 Latino Voters Only") + 
  scale_color_grey(name="",labels=c("Post-election\nKilling", "Pre-election\nKilling"), start = .7, end = .3)+
  scale_shape_discrete(name="",labels=c("Post-election Killing", "Pre-election Killing")) +
  scale_y_continuous(limits = c(.54, .75)) +
  theme(legend.position = "none",
        axis.text = element_text(size = rel(0.8)),
         axis.ticks = element_line(colour = "black"),
         legend.key = element_rect(colour = "grey80"),
         panel.background = element_rect(fill = "white", colour = NA),
         panel.border = element_rect(fill = NA, colour = "grey50"),
         panel.grid.major = element_line(colour = "grey90", size = 0.2),
         panel.grid.minor = element_line(colour = "grey90", size = 0.5),
         strip.background = element_rect(fill = "grey80", colour = "grey50"),
        legend.key.height= unit(.4, 'cm')) 

legend <- get_legend(g1)

g1 <- g1 + theme(legend.position="none")
```

```{r, fig.asp = 1.8, fig.align = "center"}
grid.arrange(legend, g1,g2, g3, g4, nrow = 3, ncol = 2,
             top="Figure 3: Average Turnout by Distance From Police Killing",
             bottom="Distance from Police Killing (0.1 Mile Intervals)",
             left="Average Proportion Turnout", 
             layout_matrix = rbind(c(1,1), c(2,3), c(4,5)),
             widths = c(3, 3), heights = c(0.2, 3, 3))
```


\newpage

In this section, I test the spatial robustness of results using the same modeling strategy previously employed. First, the participation rates of voters living one to two miles away from a pre-election police killing are compared to those of voters living one to two miles away from a post-election police killing using a difference-in-differences design. Likewise, the spatial range is also adjusted downward, comparing the participation rates of voters living half a mile or less away from a pre-election police killing to the participation rates for voters living half a mile or less away from a post-election police killing using a difference-in-differences design. We should expect that voters living half a mile or less away from a police killing will be more demobilized than voters living one to two miles away from the killing if spatial proximity matters.\footnote{In the main text, I do not model White voters seperately given the previous evidence. Complete models, including a seperate analysis of White voters at the adjusted spatial ranges, are presented in Appendix I.}

Figure 4 presents the difference-in-differences analysis for the varied spatial ranges. Again, the \textit{Difference-in-differences} coefficient is the outcome of interest in this set of models. It represents the relative effect of a pre-election police killing on voter participation rates. When observing all voters in Model 1 in Figure 4, we see that pre-election police killings have no statistically significant effect on voter turnout for voters living one to two miles away from the killing (p=0.7). We fail to see effects even if we disaggregate by voters' race and ethnicity. Model 2 and Model 3 show that Black and Latino voters living one to two miles away from a pre-election police killing are not less likely to vote than Black and Latino voters living one to two miles away from a post-election killing (p=0.7 ; p=1).   

However, we observe very different results when analyzing the participation rates of voters living less than a half mile away from the same set of police killings. Model 4 in Figure 4 suggests that pre-election police killings reduce voter turnout rates by 3.1 percentage points in their half-mile radius (p=0.04). The effects are similar to those observed in the one-mile radius previously (3 percentage points). Similarly, Model 5 in Figure 4 implies that pre-election police killings reduce Black voter turnout rates in their half-mile radius by about 5.7 percentage points (p<0.01). The estimated effects of police killings on Black voters living less than a half-mile away from a pre-election police killing is about the same as the estimated effects of police killing on Black voters living less than one mile away (5.7 percentage points versus 5.9 percentage points). On the other hand, Model 6 in Figure 4 suggests that even at smaller distances, pre-election police killings do not affect Latino voters' political participation rates.  

These findings further support to the proposition that the distance between voters and pre-election police killings plays an important mediating role. It does not appear to be the case that simply living in a city or media market area where a pre-election police killing occurs is driving the results. Instead, spatial proximity between voters and these locally salient events appears to shape participation patterns in significant ways. Furthermore, the analysis further suggests that Black voters' responses to pre-election police killings are driving most of the effect we observed when looking at all voters.

```{r , results = 'hide'}

#Over 1 mile voters
final_data <- fread("ps_final_data_2021_trimmed.csv")


#Subsetting
did_data <- final_data %>%
  filter(distance > 1 ) %>% select(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)

did_data <- subset(did_data, year != 2008)
did_data$race_wru_voter <- dplyr::recode(did_data$race_wru_voter, "black"="Black Voters", "white"="White Voters", "hispanic"="Latino Voters")

#All Voters 1 to 2 miles away
m1 <- did_data  %>% 
  do(tidy(lm( data = ., turnout ~ as.factor(year) + treatment_dummy + did))) %>%
  mutate(std.error =
    as.data.frame(summary(lm.cluster( 
      data = did_data, turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting")))$`Std. Error`) %>%
   relabel_predictors(c('as.factor(year)2016' = "Time",                      
                     treatment_dummy = "Pre-election Killing Group",          
                     did = "Difference-in-differences"))
m1$model <- "Model 1: All Voters 1-2 Miles"

#Black Voters 1 to 2 miles away
race_sub <- c("Black Voters")
m2 <- did_data  %>% 
  subset(race_wru_voter %in% race_sub) %>%
  do(tidy(lm( data = ., turnout ~ as.factor(year) + treatment_dummy + did))) %>%
  mutate(std.error =
    as.data.frame(summary(lm.cluster( 
                          data = subset(did_data, race_wru_voter %in% race_sub), 
                          turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting")))$`Std. Error`) %>%
  relabel_predictors(c('as.factor(year)2016' = "Time",                      
                     treatment_dummy = "Pre-election Killing Group",          
                     did = "Difference-in-differences"))
m2$model <- "Model 2: Black Voters 1-2 Miles"

#Latino Voters 1 to 2 miles away
race_sub <- c("Latino Voters")
m3 <- did_data  %>% 
  subset(race_wru_voter %in% race_sub) %>%
  do(tidy(lm( data = ., turnout ~ as.factor(year) + treatment_dummy + did))) %>%
  mutate(std.error =
    as.data.frame(summary(lm.cluster( 
                          data = subset(did_data, race_wru_voter %in% race_sub), 
                          turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting")))$`Std. Error`) %>%
  relabel_predictors(c('as.factor(year)2016' = "Time",                      
                     treatment_dummy = "Pre-election Killing Group",          
                     did = "Difference-in-differences"))
m3$model <- "Model 3: Latino Voters 1-2 Miles"

#Subsetting
did_data <- final_data %>%
  filter(distance <= 0.5 ) %>%
  select(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)


did_data <- subset(did_data, year != 2008)
did_data$race_wru_voter <- dplyr::recode(did_data$race_wru_voter, "black"="Black Voters", "white"="White Voters", "hispanic"="Latino Voters")


#All Voters .5 miles away
m4 <- did_data  %>% 
  do(tidy(lm( data = ., turnout ~ as.factor(year) + treatment_dummy + did))) %>%
  mutate(std.error =
    as.data.frame(summary(lm.cluster( 
      data = did_data, turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting")))$`Std. Error`) %>%
   relabel_predictors(c('as.factor(year)2016' = "Time",                      
                     treatment_dummy = "Pre-election Killing Group",          
                     did = "Difference-in-differences"))
m4$model <- "Model 4: All Voters < 1/2 Mile"

#Black Voters .5 miles away
race_sub <- c("Black Voters")
m5 <- did_data  %>% 
  subset(race_wru_voter %in% race_sub) %>%
  do(tidy(lm( data = ., turnout ~ as.factor(year) + treatment_dummy + did))) %>%
  mutate(std.error =
    as.data.frame(summary(lm.cluster( 
                          data = subset(did_data, race_wru_voter %in% race_sub), 
                          turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting")))$`Std. Error`) %>%
  relabel_predictors(c('as.factor(year)2016' = "Time",                      
                     treatment_dummy = "Pre-election Killing Group",          
                     did = "Difference-in-differences"))
m5$model <- "Model 5: Black Voters < 1/2 Mile"   


#Latino Voters .5 miles away
race_sub <- c("Latino Voters")
m6 <- did_data  %>% 
  subset(race_wru_voter %in% race_sub) %>%
  do(tidy(lm( data = ., turnout ~ as.factor(year) + treatment_dummy + did))) %>%
  mutate(std.error =
    as.data.frame(summary(lm.cluster( 
                          data = subset(did_data, race_wru_voter %in% race_sub), 
                          turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting")))$`Std. Error`) %>%
  relabel_predictors(c('as.factor(year)2016' = "Time",                      
                     treatment_dummy = "Pre-election Killing Group",          
                     did = "Difference-in-differences"))
m6$model <- "Model 6: Latino Voters < 1/2 Mile"   

models <- rbind(m1, m2, m3,  m4, m5, m6)
```

```{r, results = 'asis', fig.align='left'}
dwplot(models, 
       vline = geom_vline(xintercept = 0, colour = "grey60", linetype = 2)) + # plot line at zero _behind_ coefs
    theme_bw() + xlab("Coefficient Estimate") + ylab("") +
    ggtitle("Figure 4: The Effect of a Pre-election Police Killing\nOn Voter Turnout at Varied Spatial Distances") +
    theme(plot.title = element_text(size=12),
          legend.position = c(0.5, 0.01),
          legend.justification = c(0, 0),
          legend.background = element_rect(colour="grey80"),
          legend.title.align = .5) +
  scale_colour_grey(start = .2, end = .8)
```

As an additional test of the spatial component, I conduct a cross-sectional analysis using a linear probability model to test for a continuous relationship between proximity to a police killing and voter turnout, leveraging the quasi-experimental design to account for neighborhood-level covariates.\footnote{I use a linear probability model instead of a logit model even though the dependent variable is a binary variable because interaction coefficients are not easily interpretable in nonlinear models (Ai \& Norton, 2003). The results are robust to other modeling strategies. Appendix K includes robustness checks using logit regression.} Using multivariate cross-sectional regressions makes results more easily interpretable than using a three-way interaction model (a triple difference-in-differences) to account for the effect of distance. Since groups are matched, both observable and unobservable sources of variation are controlled for. However, controls for voters' demographic characteristics, past voting behavior, and the urbanization rates of the community are included.\footnote{One may be concerned that the inclusion of controls in a quasi-experiment may bias results (Mutz et al., 2019). However, results are robust when controls are dropped. See Appendix L.} All models include state-fixed effects and robust standard errors clustered at each killing.

First, I conduct a robustness check for the primary difference-in-differences model tested above (Model 1 in Figure 2) to compare the accuracy of the cross-sectional analysis. Model 1 in Table 1 presents the results for a cross-sectional regression with controls observing the effect of police killings within one mile of voters on voter turnout. The results are robust to this different modeling strategy. Model 1 suggests that police killings on average reduce voter turnout by 2.5 percentage points in the one-mile radius around the killing similar to the 3 percentage points reduction predicted by the difference-in-differences model (p=0.03). Importantly, these results suggest that the cross-sectional analysis produces similar results to the difference-in-differences estimator and may even be more conservative. The remaining coefficients point in the expected direction.

Next, in Model 2 in Table 1, I interact a dummy variable representing whether a voter experienced a police killing within two miles of their home before the 2016 election with the distance between voters' home addresses and the police killing (measured in miles) to test for spatial proximity's effect. The \textit{Distance} coefficient represents the effect of distance between voters and post-election police killings. The coefficient is very small and negative  but not statistically significant, implying that distance between voters and a post-election police killing does not impact voter turnout when controlling for other factors. This is expected because the killing occurs after the election. On the other hand, the \textit{Pre-election Police Killing} coefficient is negative and statistically significant (p<0.01). The coefficient indicates that living immediately next to a pre-election police killing makes voters about 3.9-percentage points less likely to vote on average. The interaction term \textit{Pre-election Police Killing*Distance} is positive and statistically significant indicating that voters living further away from a pre-election police killing are more likely to vote on average than voters living immediately next to a pre-election killing (p<0.01). Each one-mile distance between a voter's home and a pre-election police killing reduces the negative impact of a police killing on voter turnout by 1.9 percentage points. This implies that the effects of a pre-election police killing completely taper off after slightly more than two miles, though the confidence intervals overlap at a shorter distance (near the 0.5-mile range). These findings further support the theory that the spatial distance to a police killing moderates its impact on nearby voters. In summary, the effects of police killings on proximal voter turnout appear to be negative and substantive but very localized.

```{r results='hide'}
did_data <- NULL

final_data <- fread("ps_final_data_2021_trimmed.csv")


#Model with interactions for all victims and armed status with census demographic controls
m2 <- lm(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

final_data <- subset(final_data, distance <= 1)

#Model with interactions for all victims and armed status with census demographic controls
m1 <- lm(turnout_2016_voter ~  treatment_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m1_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

```

```{r, results = 'asis'}
vars.order <- c("treatment_dummy" , "distance", "democrat" , "republican" , "age_voter" , "turnout_2012_voter" ,  "pred_black_voter50" ,  "pred_hisp_voter50" , "pred_asian_voter50" , "total_voters" ,  "treatment_dummy*distance" ) 

stargazer(m1, m2, se = list(m1_se, m2_se), title = "Table 1: Distance (Miles) to Killing Interaction", dep.var.labels= "2016 Turnout", column.labels=c( "Model Robustness", "Distance Analysis"), covariate.labels= c( "Pre-election Killing", "Distance (Miles)", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Predicted Black", "Predicted Latino", "Predicted Asian", "Urbanization", "Pre-election Killing*Distance (Miles)"),   omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), table.placement = "H"  )
```


## Cross-sectional Analysis: The Role of Armed Status and Protests

Again, I use a cross-section linear probability model, leveraging the quasi-experimental design to account for neighborhood-level covariates, to test whether armed status and protests moderate local residents' political response to police killings. Models 2 and 3 in Table 2 present the analysis that tests \textbf{Hypothesis 3} and \textbf{Hypothesis 4}. 

Model 2 in Table 2 tests \textbf{Hypothesis 3}, analyzing whether victims' armed status moderates voters' behavioral responses to police killings. Unarmed victims are those determined not to possess a weapon at the time of the killing.\footnote{Results are consistent even when using a stricter measure of "unarmed" that does not include victims with toy guns in their possession. See Appendix M.} Model 2 in Table 2 suggests that armed status may not mediate the effects of proximal police killings on voter turnout. In other words, proximal police killings of unarmed victims appear to demobilize voters by about the same amount as police killings of armed victims. Model 2 shows that police killings of armed victims reduce local voter turnout by 2.3 percentage points on average (p=0.06). The model suggests that police killings of unarmed victims reduce local voter turnout by about 4 percentage points on average compared to voters living near a similar post-election killing. However, the interaction term, \textit{Pre-election Killing*Unarmed} is not statistically significant (p=0.6), suggesting that victims' armed status does not amplify nor soften the demobilizing effects of police killings. Robustness checks show that these findings hold even when data is disaggregated by victims' race.\footnote{See Appendix N.} Therefore, there is little evidence to support \textbf{Hypothesis 3}. However, because clustering reduces the effective sample size when calculating standard errors and there are only 31 unarmed killings in the dataset, the models may be under powered when analyzing the effect of armed status, reducing the likelihood of finding statistically significant results. 

Model 3 in Table 2 presents the analysis that tests \textbf{Hypothesis 4}, analyzing whether protests against police use of force moderate voters' behavioral response to police killings. The protest variable measures the number of BLM protests that occurred between 2014 and 2015 in the city where the killing occurred.\footnote{Data on BLM protests that occurred prior to a police killing is used to avoid biases associated with post-treatment controls (Montgomery et al., 2018).} \footnote{The total number of BLM protests in a city is used instead of the total number BLM protests attendees because data on attendees if often missing or unreliable.} The interaction coefficient, \textit{Pre-election killing*BLM Protests}, is the primary coefficient of interest in this case. Model 3 in Table 2 suggests that BLM protests do not mitigate or reverse the demobilizing effects of police killings, failing to support \textbf{Hypothesis 4}. Model 3 suggests that a pre-election killing in a city that did not have any BLM protests between 2014 and 2015 reduced voter turnout in its one-mile radius by 2.9 percentage points (p<0.01) on average. It is important to note again that Williamson, Trump, and Einstein (2018) found that police killings of Black victims predicted the location of subsequent BLM protests, but police killings of victims generally did not. However, disaggregating the data by race shows that proceeding BLM protests may have only moderated the effects of police killings on voter turnout when victims were White; though interpreting these findings is difficult because there are no theoretical or empirical priors to expect this effect.\footnote{See Appendix O.} Previous BLM protests in a city, which signal an organized effort to mobilize against police use of force, do not appear to play a significant role in reducing the negative effects of police killings on nearby voter participation rates.


```{r results='hide'}
#Model with interactions for all victims and armed status with census demographic controls
m1 <- lm(turnout_2016_voter ~  treatment_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m1_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

#Model with interactions for all victims and armed status with census demographic controls
m2 <- lm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

#Model with interactions for all victims and armed status with census demographic controls
m3 <- lm(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m3_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

```


```{r, results = 'asis'}
stargazer(m1, m2, m3, se = list(m1_se, m2_se, m3_se) , title = "Table 2: The Role of Armed Status and Protests on Turnout", dep.var.labels= "2016 Turnout", column.labels=c("Model Robustness", "Armed Status", "Protests"), covariate.labels= c( "Pre-election killing", "Unarmed", "BLM Protests", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Predicted Black", "Predicted Latino", "Predicted Asian","Urbanization", "Pre-election killing*Unarmed", "Pre-election killing*BLM Protests"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), table.placement = "H" )
```


# Discussion

Police killings are not only a tragedy in their own right; they disrupt communities' social, economic, and political structures. In line with much of the research studying the carceral state's impact on political behavior, police killings reduce voter turnout rates of residents living within a mile by 3 percentage points. To give these rates some perspective, about 35,000 voters living within a mile of a pre-election police killing were demobilized in just these three states. 

These effects appear substantial if we consider how difficult it is for targeted interventions to shift voting behavior. While these are very different sources of (de)mobilization, it may help contextualize effect sizes. Commercial phone banking only increases voter turnout by about 0.5 percentage points (Gerber \& Green, 2015, p. 76). In order to combat these effects, a 'Get Out the Vote' campaign using commercial phone banking would have to contact nearly 7 million voters. Door-to-door canvassing, the most effective 'Get Out the Vote' strategy, can directly increase voter turnout by about 6.5 percentage points at most when appropriately targeted, not including indirect effects of diffusion into other household members (Gerber \& Green, 2015, p. 32). Considering only direct effects, a door-to-door canvassing campaign would have to contact about 533,000 households to counteract these effects. With first-time contact rates lower than 25% (Gerber \& Green, 2015, p. 32), the campaign would have to knock on over 2 million doors in just these three states. Even small shifts in voter participation rates are important given the cost of marginally increasing turnout and that efforts to organize and advocate against police use of force through protests may not mitigate the negative impact of police killings on proximal voter turnout. Moreover, while this study only observes patterns in three states, these states have geographic and cultural variation and represent about 25% of police killings during this time, suggesting that these patterns may generalize elsewhere in the United States.

However, these findings may not generalize to other types of elections. Laniyonu (2019) finds that Stop-and-Frisk enforcement had different effects on New York City residents depending on the importance of policing in the election. Particularly, voters seemed to behave differently when faced with a local election where stop-and-frisk policies were salient and amenable to change. While admittedly a limited test of this potential moderator, I do not find that pre-election police killings had a different effect in California cities with mayoral or law enforcement-related elections compared to California cities without these elections.\footnote{See Appendix P} Pre-election police killings may have different effects for strictly local elections or in local elections where policing policy is an important campaign issue, however. The effects may also be different in the 2020 general election, where the police killing of George Floyd and other unarmed Black Americans in the months leading up to the election became an important campaign issue.

A core finding in this study is that police killings demobilize proximal Black voters more than White and Latino voters and police killings of Black victims are particularly demobilizing. Robustness checks indicate that voters living within one mile of a police killing of a Black victim are about 6.7 percentage points less likely to vote.\footnote{Police killings of Black victims may be more demobilizing than police killings of White and Latino victims because Black voters are more likely to live near a police killing of a Black victim than near a police killing of a White or Latino victim.} On the other hand, police killings of White and Latino victims have limited or no effect on voter turnout.\footnote{See Appendix J.} One possible explanation for these findings is that Black Americans have stronger feelings of linked fate than other racial and ethnic groups, believing that what happens to other Black Americans impacts them (Dawson, 1994). Therefore, Black voters may be responding differently to police killings largely based on the killing of a co-ethnic, seeing that as a threat to their livelihood. However, robustness checks fail to provide direct evidence for this mechanism.\footnote{See Appendix J.} While this test would be more rigorous and precise with better data on voters' ethnic and racial identities, there is no evidence in this data to indicate that voters are responding differently to co-ethnic killings. Black voters appear to be demobilized by pre-election police killings irrespective of the victim's race or ethnicity and Latino and White voters are not demobilized irrespective of the victim's race and ethnicity. 

Black voters living immediately next to a pre-election police killing are 8.1 percentage points less likely to vote. On the other hand, White and Latino voters living immediately next to a pre-election police killing are unaffected.\footnote{See Appendix J.} The null effect of pre-election police killings on White and Latino voters does not appear to be caused by an information deficit if we assume that voters will likely know about a police killing within a block or two of their home. Instead, knowledge of proximal police killings appear to impact White and Latino voters' participation rates less than Black voters. This finding is in line with previous research which finds that police killings reduce Black Americans' political efficacy more than than they reduce White voters' and Latino voters' political efficacy (Branton et al., 2021).  White and Latino voters are more likely to trust police than Black voters in general (Krogstad 2014). This may be because of the historically complex relationship between Black Americans and law enforcement, which makes Black Americans more suspicious of police behavior (Alexander, 2020; Brunson \& Miller, 2005). If voters see a police killing as justified, it is less likely to diminish their trust in government or political efficacy.

The evidence suggests that police killings may exacerbate patterns of unequal political participation in American democracy. While the spatial analysis indicates that the effects are very localized, spatial proximity may simply be a proxy for event exposure. Future research may choose to investigate whether other types of exposure produce similar demobilizing effects or if these findings are specifically neighborhood-level effects. 

One question that remains unclear given the scope and design is the exact temporal component.\footnote{See Appendix Q.} It is almost certain that these effects taper off at some temporal distance. Determining how far the effects extend is important in understanding how many people are demobilized by fatal police violence.

While the effects of police killings on proximal voter turnout are unlikely to change election outcomes, the findings from this study help shed light on the role that policing practices play in shaping political behavior by focusing on an increasingly important researched topic in political science: police violence. It expands on seminal theories by studying how close spatial proximity to police violence affects political behavior, looking beyond just direct personal experiences with criminal justice agents. This research also speaks to broader topics in comparative politics, intersecting issues of race and ethnic politics, political violence, crime, and policy feedback effects. This paper suggests that single events in our spatial proximity can significantly affect our public opinion and political behavior. More specifically, proximal experiences with violence, particularly state-sanctioned violence, can significantly affect one's relationship with the state, interactions with it, and one's sense of political efficacy. 
\pagebreak

# Appendix 

\begin{center}
Appendix A - Main Analysis Using MLE
\end{center}

```{r , results = 'hide'}

final_data <- fread("ps_final_data_2021_trimmed.csv")


#Subsetting
did_data <- final_data %>%
  filter(distance <=1) %>%
  select(c(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter)) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)
did_data <- subset(did_data, year != 2008)

m1 <- glm(data = did_data, turnout ~ as.factor(year)*treatment_dummy, family = binomial(link = "logit"))
se1 <- summary(glm.cluster( data = did_data, turnout ~ as.factor(year)*treatment_dummy, cluster="victims_name_shooting", family = binomial(link = "logit")))[,2]

m2 <- glm(data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year)*treatment_dummy, family = binomial(link = "logit"))
se2 <- summary(glm.cluster( data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year)*treatment_dummy, cluster="victims_name_shooting", family = binomial(link = "logit")))[,2]

m3 <- glm(data = subset(did_data,  race_wru_voter == "black" ), turnout ~ as.factor(year)*treatment_dummy, family = binomial(link = "logit"))
se3 <- summary(glm.cluster( data = subset(did_data, race_wru_voter == "black" ), turnout ~ as.factor(year)*treatment_dummy, cluster="victims_name_shooting", family = binomial(link = "logit")))[,2]

m4 <- glm(data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year)*treatment_dummy, family = binomial(link = "logit"))
se4 <- summary(glm.cluster( data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year)*treatment_dummy, cluster="victims_name_shooting", family = binomial(link = "logit")))[,2]

newdata <- with(did_data, data.frame(treatment_dummy = c(0,0,1,1), year=c("2012","2016","2012","2016")))

p1 <- predict(m1, newdata, type="response")
d1 <- (p1[2] - p1[1]) - (p1[4] - p1[3])

p1 <- predict(m2, newdata, type="response")
d2 <- (p1[2] - p1[1]) - (p1[4] - p1[3])

p1 <- predict(m3, newdata, type="response")
d3 <- (p1[2] - p1[1]) - (p1[4] - p1[3])

p1 <- predict(m4, newdata, type="response")
d4 <- (p1[2] - p1[1]) - (p1[4] - p1[3])
```

```{r, results = 'asis'}
stargazer(m1, m2, m3, m4, se = list(se1, se2, se3, se4), title = "Table A: One-Mile Range Difference-in-differences Logit Model", dep.var.labels= "2016 Turnout", column.labels=c("All Voters", "White Voters", "Black Voters", "Latino Voters"), covariate.labels= c("Time", "Pre-election Killing Group",  "Difference-in-differences" ),  header=FALSE, type='latex', align  = TRUE, font.size= "small", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```

Note: Table A is a robustness check for Figure 2, using logit regression. 

The results in Table A demonstrate that the results in Figure 2 are robust when a logit model is used instead of a linear probability model. The difference-in-differences coefficient is negative and statistically significant in both Model 1 and Mode 3 but not in Model 2 or Model 4, just like in Figure 2. However, interaction terms in logit models can be difficult to interpret (Ai and Norton, 2003). 

Analyzing predicted probabilities for Model 1 suggests that pre-election killings reduce voter turnout rates by 3 percentage points in the one-mile radius around the killing compared to the control group, very much in line with the findings in Figure 2. Similarly, the predicted probabilities for Model 3 imply that pre-election killings reduce Black voter turnout rates by 5.9 percentage points in the one-mile radius around the killing compared to the control group. These findings replicate those in Figure 2. 


Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage


\begin{center}
Appendix B - Police killing Context Balance Table
\end{center}

```{r results='hide'}
ps_data <- read_csv("GeoCodedKillings.csv")
ps_data <- subset(ps_data, State %in% c("CA", "OH", "FL") & cause_of_death != "Vehicle" & cause_of_death !=  "Death in Custody" & cause_of_death != "int")  
ps_data$treatment_dummy <- 0
ps_data$treatment_dummy[as.Date(ps_data$date_of_incident_month_day_year, format="%m-%d-%y") <= 
                          as.Date("2016-11-08", format="%Y-%m-%d")] <- 1

#Protest data
protests <- read_csv("C:/Users/marka/OneDrive/Documents/Police Shooting Research/protest_data/BLM_protests_2014.08.09-2015.08.09.csv")

protests_agg <- protests %>%
  group_by(ST, FIPS) %>%
  summarise(total_protests = n(), total_att = sum(popnum, na.rm = TRUE), average_att = mean(popnum, na.rm=TRUE))

protests_agg$FIPS <- str_pad(protests_agg$FIPS , 7, pad = "0")
sum(duplicated(protests_agg$FIPS ))

protests_agg <- protests_agg %>%
  separate(FIPS, c("state_fips" , "place_fips"), sep = 2)

#Merge
protests_agg$state_fips <- as.character(protests_agg$state_fips)
protests_agg$place_fips <- as.character(protests_agg$place_fips)
ps_data$state_fips <- as.character(ps_data$`State FIPS`)
ps_data$place_fips <- as.character(str_sub(ps_data$`Place FIPS` , -5, -1))
ps_data$place_fips  <- str_pad(ps_data$place_fips, 5, pad = "0")
ps_data$state_fips  <- str_pad(ps_data$state_fips, 2, pad = "0")
ps_data <- left_join(ps_data, protests_agg, by = c("state_fips", "place_fips"))

ps_data$t_pf <- paste(ps_data$treatment_dummy, ps_data$place_fips, sep="_")

#sum(ps_data$total_protests[ps_data$treatment_dummy==0 & !duplicated(ps_data$t_pf)], na.rm=TRUE)
#sum(ps_data$total_protests[ps_data$treatment_dummy==1 & !duplicated(ps_data$t_pf)], na.rm=TRUE)
```

```{r }

#fixing column names for better syntax
names(ps_data) <- gsub(" ", "_",names(ps_data))
names(ps_data) <- gsub("'", "",names(ps_data))
names(ps_data) <- gsub("/", "",names(ps_data))
names(ps_data) <- gsub(":", "",names(ps_data))

#Removing vehicle collision deaths
ps_data <- subset(ps_data, cause_of_death != "Vehicle" &  cause_of_death !=  "Death in Custody" & cause_of_death != "int")

#Making treatment dummy
ps_data$date_of_incident_month_day_year <- as.Date(ps_data$date_of_incident_month_day_year , format = "%m-%d-%y")
ps_data$treatment_dummy <-0
ps_data$treatment_dummy[ps_data$date_of_incident_month_day_year <= "2016-11-08"] <- 1

```

```{r , results = "asis", fig.pos="p"}

Hmisc::label(ps_data$victims_race) <- "Victim's Race"
Hmisc::label(ps_data$victims_gender) <- "Victim's Gender"
Hmisc::label(ps_data$victims_age) <- "Victim's Age"
Hmisc::label(ps_data$unarmed) <-"Armed Status"

victims_t1 <- compareGroups(treatment_dummy ~  victims_race + victims_gender + victims_age + unarmed, data = ps_data)

tab1 <- createTable(victims_t1)
colnames(tab1$descr) <- c("Post-election killing (Control)", "Pre-election killing", "P Value")

export2md(tab1, caption="Table B: Balance Table - Victims' Demographic Characteristics", format="latex")

```

Note: Table B compares the demographic characteristics of police killing victims and their armed status in the treatment (pre-election) and control (post-election) group. The balance table suggests that victims' demographic characteristics and armed status are similar across the two groups.

\newpage

\begin{center}
Appendix C - Police killing Census Tract Balance Table
\end{center}

```{r }
Hmisc::label(ps_data$ACS_DemographicsRace_and_ethnicityHispanic_or_LatinoPercentage) <- "Census % Latino"
Hmisc::label(ps_data$ACS_DemographicsSexMalePercentage) <- "Census % Male"
Hmisc::label(ps_data$ACS_DemographicsRace_and_ethnicityNot_Hispanic_or_Latino_Black_or_African_American_alonePercentage) <- "Census % Black"
Hmisc::label(ps_data$ACS_DemographicsRace_and_ethnicityNot_Hispanic_or_Latino_White_alonePercentage) <- "Census % White"
Hmisc::label(ps_data$ACS_DemographicsRace_and_ethnicityNot_Hispanic_or_Latino_Asian_alonePercentage) <- "Census % Asian"
Hmisc::label(ps_data$ACS_DemographicsRace_and_ethnicityNot_Hispanic_or_Latino_American_Indian_and_Alaska_Native_alonePercentage) <- "Census % Native American"
Hmisc::label(ps_data$ACS_DemographicsMedian_ageTotalValue) <- "Census Median Age"


victims_t4 <- compareGroups(treatment_dummy ~ ACS_DemographicsSexMalePercentage+
                              ACS_DemographicsMedian_ageTotalValue+
                              ACS_DemographicsRace_and_ethnicityHispanic_or_LatinoPercentage +  
                              ACS_DemographicsRace_and_ethnicityNot_Hispanic_or_Latino_Black_or_African_American_alonePercentage + 
                              ACS_DemographicsRace_and_ethnicityNot_Hispanic_or_Latino_White_alonePercentage +
                              ACS_DemographicsRace_and_ethnicityNot_Hispanic_or_Latino_Asian_alonePercentage +
                              ACS_DemographicsRace_and_ethnicityNot_Hispanic_or_Latino_American_Indian_and_Alaska_Native_alonePercentage 
                            , data = ps_data)


tab4 <- createTable(victims_t4)
colnames(tab4$descr) <- c("Post-election killing (Control)", "Pre-election killing", "P Value")
export2md(tab4, caption="Table C: Census Tract Demographic Balance Table for Police killing Locations")



```

Note: Table C compares the census demographic data from the census tracts where police killing occurred in the treatment (pre-election) and control (post-election) group. The balance table suggests that neighborhoods are similar across the two groups. While not reaching conventional levels of statistical significance, there are slightly more Latinos in the pre-election group. This appears to be influenced heavily by killings in Florida, where more Latino victims were shot and killed before the election than after. Since the victim's race is correlated with the surrounding neighborhoods racial make-up, it appears to be driving the discrepancy in voter demographics. However, it is important to note that census tracts do not perfectly align with the neighborhoods considered in the study.

\newpage

\begin{center}
Appendix D - Police Killing Cluster Balance Table
\end{center}

```{r}
#For later in the appendix, to save time knitting
final_data_cluster <- final_data %>%
  group_by(treatment_dummy, victims_name_shooting, date_of_incident_month_day_year_shooting) %>%
  summarise(democrat = mean(democrat),
            republican = mean(republican),
            male = mean(gender_voter_M ),
            age = mean(age_voter),
            pred_black_voter50 = mean( pred_black_voter50),
            pred_hisp_voter50 = mean(pred_hisp_voter50),
            pred_asian_voter50 = mean(pred_asian_voter50),
            pred_white_voter50 = mean(pred_white_voter50),
            turnout_2012_voter = mean(turnout_2012_voter)
            )

Hmisc::label(final_data_cluster$democrat) <- "Democrat"
Hmisc::label(final_data_cluster$republican) <- "Republican"
Hmisc::label(final_data_cluster$male) <- "Male"
Hmisc::label(final_data_cluster$age) <- "Age"
Hmisc::label(final_data_cluster$pred_black_voter50) <- "Predicted Black"
Hmisc::label(final_data_cluster$pred_hisp_voter50) <- "Predicted Latino"
Hmisc::label(final_data_cluster$pred_white_voter50) <- "Predicted White"
Hmisc::label(final_data_cluster$pred_asian_voter50) <- "Predicted Asian"
Hmisc::label(final_data_cluster$turnout_2012_voter ) <- "2012 Voter Turnout"


voters_t1 <- compareGroups(treatment_dummy ~  democrat + republican + male + age + pred_black_voter50 + pred_hisp_voter50 + pred_white_voter50 + pred_asian_voter50 + turnout_2012_voter, data = final_data_cluster)


tab5 <- createTable(voters_t1)
colnames(tab5$descr) <- c("Post-election Killing", "Pre-election Killing", "P Value")
```

```{r table.pos= "p"}
export2md(tab5, caption="Table D: Balance Table - Voter Demographics", format="latex")
```

Note: Table D compares the voters in the treatment (pre-election) and control (post-election) group. The balance table suggests that voters are similar across the two groups. There is significant variation in the information each state provides in their voter files. Information on voters' ages and party identification is available in all three states, gender identification is not available in Ohio, and racial and ethnic identification is only available in Florida.

\newpage

\begin{center}
Appendix E - Testing for Potential Voter File Bias
\end{center}

```{r}

final_data <- fread("ps_final_data_2021_trimmed.csv")

final_data <- subset(final_data, distance <= 1)

#Simple Registration comparison 
final_data <- final_data %>%
  mutate(pre_elec_reg = ifelse(as.Date(reg_date_voter) <= as.Date("2016-11-08") & as.Date(reg_date_voter) >= as.Date("2016-05-08"),1,0))
#prop.table(table(final_data$treatment_dummy, final_data$pre_elec_reg), margin = 1)

#Graphing trends
g2 <- ggplot(final_data, aes(as.Date(reg_date_voter), fill = as.factor(treatment_dummy))) + 
  geom_density(alpha = 0.2) + 
  scale_x_date(limits = c(min=as.Date("2016-05-08"), max=as.Date("2017-05-08"))) +
  labs(fill="", x="Voter Registration Date", subtitle = "Figure E: Comparison of Voter Registration Trends Before Election") +
  geom_vline(xintercept = as.Date("2016-11-08"), color="red") +
  scale_fill_manual(values = c("lightblue","orange"), labels = c("Post-Election Killing", "Pre-Election Killing")) +
  theme_bw()
g2
```

Note: A potential short fall of using voter files to measure changes in voter turnout is that voter files do not account for unregistered voters. If pre-election police killings significantly increased pre-election voter registration rates in nearby communities but these newly registered voters were less likely to vote than the average voter, our treatment effect would be biased. If this were the case, the lower voter turnout rates in the pre-election killing group would be due to changes in the denominator and not due to changes in the numerator, as assumed. In other words, we might see a similar effect in our models if pre-election police killings increased the total number of registered voters in those neighborhoods but did not proportionately increase voter participation rates in those neighborhoods.

To test for the this possibility, Figure E plots voter registration trends in Florida and Ohio from six months before to six months after the 2016 general election by treatment group for voters living within a mile a police killing.\footnote{Voter registration dates are not available in the acquired California voter file.} The figure suggests that voter registration trends were similar in the pre-election killing and post-election killing groups leading up to the 2016 general election. Approximately 6.4% of voters in the treatment (pre-election killing) group registered to vote in the six months before the 2016 general election compared to 5.9% of voters in the control (post-election killing) group. This is a difference of less than 2,000 voters. Even if we assume the extreme scenario were none of the newly registered voters voted in the 2016 general election and extend these findings to voters in California, differences in pre-election voter registration rates across the treatment and control group would not account for the estimated effect of pre-election police killings on voter turnout. This analysis suggests that differences in pre-election voter registration rates are not biasing estimates.



```{r , results = 'hide'}

final_data <- fread("ps_final_data_2021_trimmed.csv")


#Subsetting
did_data <- final_data %>%
  filter(distance <=1 & state == "OH") %>%
  select(c(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter)) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)


did_data <- subset(did_data, year != 2008)


m1 <- lm( data = did_data, turnout ~ as.factor(year) + treatment_dummy + did)
se1 <- summary(lm.cluster( data = did_data, turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m2 <- lm(data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did)
se2 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m3 <- lm(data = subset(did_data,  race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did)
se3 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m4 <- lm(data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did)
se4 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

```

```{r, results = 'asis'}
stargazer(m1, m2, m3, m4, se = list(se1, se2, se3, se4), title = "Table E: Difference-in-differences Excluding Ohio", dep.var.labels= "2016 Turnout", column.labels=c("All Voters", "White Voters", "Black Voters", "Latino Voters"), covariate.labels= c("Time", "Pre-election Killing Group",  "Difference-in-differences" ),  header=FALSE, type='latex', align  = TRUE, font.size= "small", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```

Note: Another potential issue with voter files arises if they are acquired years after an election because people may move homes, pass away, or register to vote after the election. The patterns may be different in the pre-election and post-election killings groups, potentially biasing estimates. The California and Florida voter files were acquired immediately after the 2016 general election, reducing the potential bias introduced by this issue. On the other hand, the Ohio voter file was acquired about two years after the election. Therefore, data from Ohio may be an unreliable "snap shot" of the 2016 electorate and lead to biased estimates. Table E addresses this concern by excluding voters from Ohio, providing a robustness check of Figure 2. The models are robust to the exclusion of Ohio voters. Model 1 in Table E suggests that police killings reduce voter turnout by about 2.6 percentage points (p=0.02) in the shooting's one-mile radius, closely in line with estimates that include data from Ohio. Model 3 in Table E implies that police killings reduce Black voter turnout by about 6.3 percentage points in their one-mile radius, more than previously estimated when including Ohio data (p<0.01). This suggests that the late acquisition of the Ohio voter file is not biasing estimates. 

Models are estimated using OLS regression. Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage

\begin{center}
Appendix F - Difference-in-differences with Overlapping Killings Removed
\end{center}

```{r}
#####Control And Treatment Group Overlap Code#####

k1 <- fread("overlap1.csv")
```

```{r , results = 'hide'}
#Subsetting
did_data <- subset(final_data, distance <= 1) %>%
  select(c(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter)) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)


did_data <- subset(did_data, year != 2008)

#Merging overlap data
did_data <- left_join(did_data, k1, by = c("victims_name_shooting"))
did_data$overlap[is.na(did_data$overlap)] <- 0

#Models
m1 <- lm( data = subset(did_data, overlap!= 1 ), turnout ~ as.factor(year) + treatment_dummy + did)
se1 <- summary(lm.cluster( data = subset(did_data, overlap!= 1 ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m2 <- lm(data = subset(did_data, overlap!= 1 & race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did)
se2 <- summary(lm.cluster( data = subset(did_data, overlap!= 1 & race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m3 <- lm(data = subset(did_data, overlap!= 1 & race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did)
se3 <- summary(lm.cluster( data = subset(did_data, overlap!= 1 & race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m4 <- lm(data = subset(did_data, overlap!= 1 & race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did)
se4 <- summary(lm.cluster( data = subset(did_data, overlap!= 1 & race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

```

```{r, results = 'asis'}
stargazer(m1, m2, m3, m4, se = list(se1, se2, se3, se4), title = "Table F: One-Mile Range Difference-in-differences without Overlapping Clusters", dep.var.labels= "2016 Turnout", column.labels=c("All Voters", "White Voters", "Black Voters", "Latino Voters"), covariate.labels= c("Time", "Pre-election Killing Group",  "Difference-in-differences" ),  header=FALSE, type='latex', align  = TRUE, font.size= "small", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```


Note: Table F tests the robustness of the difference-in-differences analysis, controlling for spillover effects. It analyzes the effects of a pre-election police killing on voters living within one mile of the incident. Police killings within two miles of each other are both excluded if they are in separate groups (treatment and control). In this case, there are no voters simultaneously in the treatment and control group. However, the sample of police killings is biased against urban neighborhoods where overlapping clusters are more common. The estimated effects of a pre-election killing are largely in line with the primary findings. This set of models suggests that pre-election police killings generally reduce voter turnout by 3 percentage points (p=0.02) in the one-mile radius surrounding the killing and reduce voter turnout by 8.2 percentage points in the one-mile radius surrounding Black voters (p<0.01). 

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage

\begin{center}
Appendix G - WRU Package Validation Results
\end{center}

\begin{table}[h]
\begin{tabular}{|r||l|l|l|l||l|}
\hline
& \multicolumn{5}{|c|}{Table G: Florida Racial Classifications} \\ \hline
Predicted Race  & Asian  & Black  & Hispanic & White   & Precision \\ \hline \hline
Asian           & 3007   & 435    & 297      & 1725    & 54.6\%    \\ 
Black           & 117    & 66799  & 865      & 10804   & 85\%    \\ 
Hispanic        & 338    & 1827   & 37436    & 4651    & 84.6\%    \\ 
White           & 689    & 11601  & 4938     & 144398  & 89.3\%    \\ \hline
Recall          & 72.4\% & 82.8\% & 85\%   & 89.4\%  & NA        \\ \hline
\end{tabular}
\caption{Note: Race prediction recall and precision verification.}
\end{table}


Note: Table G presents the precision and recall rates of the race prediction Bayesian algorithm (WRU package in R). It compares predicted ethnorace to self-identified race and ethnicity data included in the Florida voter files. The WRU package uses Bayesian probabilities to predict an individual's ethnorace [White, Black, Hispanic, or Asian] using their surname and location. When available, gender, age, and party identification are also used to improve predictions (see Imai and Khanna 2015 for method details). The output is not dichotomous but predicted probabilities. Here, I assume voters with a predicted ethnorace above 50\% belong to that ethnorace.

\newpage

\begin{center}
Appendix H - Parallel Trends Formal Analysis
\end{center}

```{r , results = 'hide'}
#Subsetting
did_data <- subset(final_data, distance <= 1) %>%
  select(c(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter)) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))

did_data <- subset(did_data, year != 2016)
did_data$dif_trend <- ifelse(did_data$year==2012 & did_data$treatment_dummy==1, 1, 0)

m1 <- lm( data = did_data, turnout ~ as.factor(year) + treatment_dummy + dif_trend)
se1 <- summary(lm.cluster( data = did_data, turnout ~ as.factor(year) + treatment_dummy + dif_trend, cluster="victims_name_shooting"))[,2]

m2 <- lm(data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + dif_trend)
se2 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + dif_trend, cluster="victims_name_shooting"))[,2]

m3 <- lm(data = subset(did_data,  race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + dif_trend)
se3 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + dif_trend, cluster="victims_name_shooting"))[,2]

m4 <- lm(data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + dif_trend)
se4 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + dif_trend, cluster="victims_name_shooting"))[,2]

```

```{r, results = 'asis'}
stargazer(m1, m2, m3, m4, se = list(se1, se2, se3, se4), title = "Table H: One-Mile Range Pre-existing Trends Test", dep.var.labels= "2012 Turnout", column.labels=c("All Voters", "White Voters", "Black Voters", "Latino Voters"), covariate.labels= c("Time", "Pre-election Killing Group",  "Difference in Trends" ),  header=FALSE, type='latex', align  = TRUE, font.size= "small", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```

Note: Table H formally tests the parallel trends assumption for voters living within one mile of a police killing using OLS regression. The \textit{Pre-election Killing Group} coefficients show that there was no statistically significant difference in voter turnout rates between the pre-election killing groups and the post-election killing (control) groups in 2008 when looking at all voter. Of particular interest are the \textit{Difference in Trends} coefficients which show that there is no statistically significant difference in the rate of change in voter turnout for the pre-election killing groups and the post-election killing (control) groups between 2008 and 2012 across three of the models. When looking only at Black voters, the difference-in-differences in trends between 2008 and 2012 is less than 1.3 percentage points (p=0.03). This lends support to the parallel trends assumption for the difference-in-differences analysis.

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage

\begin{center}
Appendix I - Difference-in-differences Complete Models
\end{center}

```{r , results = 'hide'}
#Subsetting
did_data <- subset(final_data, distance <= 1) %>%
  select(c(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter)) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)

did_data <- subset(did_data, year != 2008)


m1 <- lm( data = did_data, turnout ~ as.factor(year) + treatment_dummy + did)
se1 <- summary(lm.cluster( data = did_data, turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m2 <- lm(data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did)
se2 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m3 <- lm(data = subset(did_data,  race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did)
se3 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m4 <- lm(data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did)
se4 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

```

```{r, results = 'asis'}
stargazer(m1, m2, m3, m4, se = list(se1, se2, se3, se4), title = "Table I1: One-Mile Range Difference-in-differences", dep.var.labels= "2016 Turnout", column.labels=c("All Voters", "White Voters", "Black Voters", "Latino Voters"), covariate.labels= c("Time", "Pre-election Killing Group",  "Difference-in-differences" ),  header=FALSE, type='latex', align  = TRUE, font.size= "small", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```

Note: Table I1 provides the full table results for Figure 2. Models are estimated using OLS regression. 

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage


```{r , results = 'hide'}
#Subsetting
did_data <- final_data %>% 
  subset(distance > 1) %>%
  select(c(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter)) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)

did_data <- subset(did_data, year != 2008)

# Models
m1 <- lm( data = did_data, turnout ~ as.factor(year) + treatment_dummy + did)
se1 <- summary(lm.cluster( data = did_data, turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m2 <- lm(data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did)
se2 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m3 <- lm(data = subset(did_data,  race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did)
se3 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m4 <- lm(data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did)
se4 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

```

```{r, results = 'asis'}
stargazer(m1, m2, m3, m4, se = list(se1, se2, se3, se4), title = "Table I2: One to Two-Mile Range Difference-in-differences", dep.var.labels= "2016 Turnout", column.labels=c("All Voters", "White Voters", "Black Voters", "Latino Voters"), covariate.labels= c("Time", "Pre-election Killing Group",  "Difference-in-differences" ),  header=FALSE, type='latex', align  = TRUE, font.size= "small", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```

Note: Table I2 provides the full table results for parts of Figure 8 (Model 1 and Model 2). Additionally, Table I2 analyzes the effect of pre-election police killings for White and Latino voters living one to two miles away from the incidents using a difference-in-differences. Models are estimated using OLS regression. Standard errors in parentheses.

Cluster-robust standard errors are in parentheses.$^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage


```{r , results = 'hide'}
#Subsetting
did_data <- final_data %>% 
  subset(distance <= 1) %>%
  select(c(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter)) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)

did_data <- subset(did_data, year != 2008)

#Models
m1 <- lm( data = did_data, turnout ~ as.factor(year) + treatment_dummy + did)
se1 <- summary(lm.cluster( data = did_data, turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m2 <- lm(data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did)
se2 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "white" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m3 <- lm(data = subset(did_data,  race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did)
se3 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "black" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m4 <- lm(data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did)
se4 <- summary(lm.cluster( data = subset(did_data, race_wru_voter == "hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

```

```{r, results = 'asis'}
stargazer(m1, m2, m3, m4, se = list(se1, se2, se3, se4), title = "Table G3: Half-Mile Range Difference-in-differences", dep.var.labels= "2016 Turnout", column.labels=c("All Victims", "White Victims", "Black Victims", "Latino Victims"), covariate.labels= c("Time", "Pre-election Killing Group",  "Difference-in-differences" ),  header=FALSE, type='latex', align  = TRUE, font.size= "small", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```

Note: Table I3 provides the full table results for parts of Figure 8 (Model 3 and Model 4). Additionally, Table I3 analyzes the effect of pre-election police killings for White and Latino voters living within a half-mile of the incidents using a difference-in-differences. Models are estimated using OLS regression.

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage

\begin{center}
Appendix J - Analysis of Victims' Race and Ethnicity
\end{center}

```{r , results = 'hide'}
#Subsetting
did_data <- did_data <- final_data %>% 
  subset(distance <= 1) %>%
  select(c(treatment_dummy, victims_name_shooting, victims_race, turnout_2008_voter,
                                   turnout_2012_voter, turnout_2016_voter, distance, race_wru_voter)) %>%
  gather("year","turnout", c(4:6))

did_data$year <- as.integer(gsub("_voter", "", gsub("turnout_", "", did_data$year)))
did_data$did <- ifelse(did_data$year==2016 & did_data$treatment_dummy==1, 1, 0)

did_data <- subset(did_data, year != 2008)

m2 <- lm(data = subset(did_data, victims_race == "White" ), turnout ~ as.factor(year) + treatment_dummy + did)
se2 <- summary(lm.cluster( data = subset(did_data, victims_race == "White" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m3 <- lm(data = subset(did_data,  victims_race == "Black" ), turnout ~ as.factor(year) + treatment_dummy + did)
se3 <- summary(lm.cluster( data = subset(did_data, victims_race == "Black" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

m4 <- lm(data = subset(did_data, victims_race == "Hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did)
se4 <- summary(lm.cluster( data = subset(did_data, victims_race == "Hispanic" ), turnout ~ as.factor(year) + treatment_dummy + did, cluster="victims_name_shooting"))[,2]

```

```{r, results = 'asis'}
stargazer(m2, m3, m4, se = list(se2, se3, se4), title = "Table J1: One-Mile Range Difference-in-differences By Victims' Race", dep.var.labels= "2016 Turnout", column.labels=c("White Victims", "Black Victims", "Latino Victims"), covariate.labels= c("Time", "Pre-election Killing Group",  "Difference-in-differences" ),  header=FALSE, type='latex', align  = TRUE, font.size= "small", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```

Table J1 presents the results of the difference-in-differences analysis with the data disaggregated by victims' race and ethnicity. The \textit{Difference-in-differences} coefficients in Table J1 are the difference-in-differences estimators and the coefficients of interest. They estimate the effect of a pre-election killing on 2016 voter turnout. If we disaggregate the data based on the victims' race and ethnicity, the difference-in-differences analysis suggests that the killing of White victims and Latino victims have no effect on proximal voter turnout. Neither DiD coefficient is statistically significant nor do they suggest substantially large effects. On the other hand, the DiD analysis predicts that police killings of Black victims reduce nearby voter turnout by about 6.7 percentage points (p=0.02). Police killings of Black victims have strong demobilizing effects, while police killings of White victims have no statistically distinguishable effect on voter participation rates. Perhaps surprisingly, the killing of Latino victims fails to have a discernible effect on nearby voters' participation rates.

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001. 

\newpage

```{r results = 'hide'}
#Model with interactions for white victims and armed status with census demographic controls
m2<- lm(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter  + total_voters + state, data = subset(final_data, pred_white_voter50==1),  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_white_voter50==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 

#Model with interactions for poc victims and armed status with census demographic controls
m3 <- lm(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_black_voter50==1),  na.action = na.omit)

# save cluster robust standard errors
m3_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter  + total_voters + state, data = subset(final_data, pred_black_voter50==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 

#Model with interactions for poc victims and armed status with census demographic controls
m4 <- lm(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_hisp_voter50==1),  na.action = na.omit)

# save cluster robust standard errors
m4_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_hisp_voter50==1),   cluster = c("victims_name_shooting"))))$`Std. Error`
```

```{r, results = 'asis'}
stargazer(m2, m3, m4, se = list(m2_se, m3_se, m4_se), title = "Table J2: Distance Analysis Disaggregated by Voters' Race and Ethncity", dep.var.labels= "2016 Turnout", column.labels=c("White Voters", "Black Voters", "Latino Voters"), covariate.labels= c( "Pre-election killing", "Distance", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Urbanization", "Pre-election killing*Distance"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n"  )
```

Table J2 presents the results of a cross-sectional analysis and distance interaction with the data disaggregated by voters' race and ethnicity. Model 1 in Table J2 tests if distance mediates the effect of proximal pre-election police killings on White voters. The \textit{Pre-election Killing} coefficient is negative but not statistically significant (p=0.13). White voters appear to not be affected by police killings even when those killings happen next to their home. The \textit{Pre-election Killing*Distance} coefficient is small and not statistically significant (p=0.28). Model 2 tests whether distance mediates the negative effects of police killings on Black voters. The model implies that Black voters living immediately next to a police killing are 8.1 percentage points less likely to vote (p<0.01). The \textit{Pre-election Killing*Distance} coefficient in Model 2 is positive and statistically significant, implying that Black voters living 1 mile away from a police killing are only 4.3 percentage points less likely to vote (p<0.01). Finally, Model 3 tests whether distance mediates the effects of proximal police killings on Latino voter turnout. Again, the \textit{Pre-election Killing} coefficient is negative but not statistically significant (p=0.13) and the \textit{Pre-election Killing*Distance} coefficient in Model 3 is not statistically significant (p=0.38). The analysis further supports the finding that proximal police killings primarily demobilize Black voters. Even when White and Latino voters live right next to a pre-election police killing, they do not appear to be demobilized.

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001. 

\newpage

```{r , results = 'hide'}
final_data <- subset(final_data, distance <= 1)
#Model with interactions for white victims and armed status with census demographic controls
m2<- lm(turnout_2016_voter ~  treatment_dummy*White_victim  +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_white_voter50==1),  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*White_victim  +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_white_voter50==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 

#Model with interactions for poc victims and armed status with census demographic controls
m3 <- lm(turnout_2016_voter ~  treatment_dummy*Black_victim  +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_black_voter50==1),  na.action = na.omit)

# save cluster robust standard errors
m3_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*Black_victim  +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_black_voter50==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 

#Model with interactions for poc victims and armed status with census demographic controls
m4 <- lm(turnout_2016_voter ~  treatment_dummy*Hispanic_victim  +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_hisp_voter50==1),  na.action = na.omit)

# save cluster robust standard errors
m4_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*Hispanic_victim  +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_hisp_voter50==1),   cluster = c("victims_name_shooting"))))$`Std. Error`
  

```


```{r, results = 'asis'}
vars.order <- c("treatment_dummy" ,  "democrat" , "republican" , "age_voter" , "turnout_2012_voter" , "total_voters" , "White_victim" , "Black_victim" ,  "Hisp_victim" , "treatment_dummy*White_victim" , "treatment_dummy*Black_victim" , "treatment_dummy*Hisp_victim")

stargazer(m2, m3, m4, se = list(m2_se, m3_se, m4_se),  title = "Table J3: Coethnic Interaction", covariate.labels= c( "Pre-election Killing", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Urbanization",  "White Victim", "Black Victim", "Latino Victim",  "Pre-election Killing*White Victim", "Pre-election Killing*Black Victim", "Pre-election Killing*Latino Victim"), dep.var.labels= "2016 Turnout", column.labels=c( "White", "Black", "Latino"),   omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n"   ,order=paste0("^", vars.order , "$") )

```

Note: Table J3 uses a cross-sectional analysis to test whether the racialized effects are driven by reactions to the death of a co-ethnic. The results in Table J3 does not provide evidence that this is the case for victims of any race as all interaction effects are not statistically significant. However, victims' race and ethnicity is coded using Bayesian name probabilities based on census data. While these measurements are a useful approximation for true race and ethnicity on aggregate, they contain measurement error. This error lessens the likelihood of finding statistically significant results and increases the likelihood of type two errors. Yet, given this data, there is no empirical support for a co-ethnic effect.

$^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001."

\newpage

\begin{center}
Appendix K - Cross-sectional Models using MLE 
\end{center}

```{r results='hide'}

final_data <- fread("ps_final_data_2021_trimmed.csv")


#Pre running the two models below for the following section to reduce time uploading data
#Model with interactions for all victims and armed status with census demographic controls
m2.R <- lm(turnout_2016_voter ~  treatment_dummy*distance , data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m2.R_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*distance , data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

#All Victims 
final_data$state <- as.factor(final_data$state)

m2 <- glm(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit, family = binomial(link = "logit"))

# save cluster robust standard errors
m2_se <- as.data.frame(summary(glm.cluster(turnout_2016_voter ~  treatment_dummy*distance +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  family = binomial(link = "logit"),   cluster = c("victims_name_shooting"))))$`Std. Error`

final_data <- subset(final_data, distance <= 1)

#Model with interactions for all victims and armed status with census demographic controls
m1 <- glm(turnout_2016_voter ~  treatment_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit,  family = binomial(link = "logit"))

# save cluster robust standard errors
m1_se <- as.data.frame(summary(glm.cluster(turnout_2016_voter ~  treatment_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  family = binomial(link = "logit"),   cluster = c("victims_name_shooting"))))$`Std. Error`


newdata <- with(final_data, data.frame(treatment_dummy = c(0,1), democrat = 0, republican = 0 , age_voter = mean(final_data$age_voter, na.rm = TRUE),  turnout_2012_voter = 1, pred_black_voter50 = 0 , pred_hisp_voter50 = 0, pred_asian_voter50 = 0, total_voters = mean(final_data$total_voters, na.rm = TRUE), state = "CA"))
p1 <- predict(m1, newdata, type="response")
```

```{r, results = 'asis'}
vars.order <- c("treatment_dummy" , "distance", "democrat" , "republican" , "age_voter" , "turnout_2012_voter" ,  "pred_black_voter50" ,  "pred_hisp_voter50" , "pred_asian_voter50" , "total_voters" ,  "treatment_dummy*distance" ) 

stargazer(m1, m2, se = list(m1_se, m2_se), title = "Table K1: Logit Regression - Distance (Miles) to Killing Interaction", dep.var.labels= "2016 Turnout", column.labels=c( "Model Robustness", "Distance"), covariate.labels= c( "Pre-election Killing", "Distance (Miles)", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Predicted Black", "Predicted Latino", "Predicted Asian", "Urbanization", "Pre-election Killing*Distance (Miles)"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f", "aic"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n", order=paste0("^", vars.order , "$") )
```

Note: Table K1 presents a robustness check of Table 1 using a logit regression with cluster-robust standard errors instead of OLS given that the dependent variable is a binary variable. The results are robust to this modeling specification. 

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage

```{r , results = 'hide'}
#Model with interactions for all victims and armed status with census demographic controls
m2 <- glm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit,  family = binomial(link = "logit"))

# save cluster robust standard errors
#cluster_se9 <- as.vector(summary(m9_all_controls , cluster = c("victims_name_shooting"))$coefficients[,"Std. Error"])
m2_se <- summary(miceadds::glm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,   family = binomial(link = "logit"), cluster = "victims_name_shooting"))[,2]

#Model with interactions for all victims and armed status with census demographic controls
m3 <- glm(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit,  family = binomial(link = "logit"))

# save cluster robust standard errors
m3_se <- summary(miceadds::glm.cluster(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,   family = binomial(link = "logit"), cluster = "victims_name_shooting"))[,2]
```

```{r, results = 'asis'}
stargazer(m2, m3,  se = list(m2_se, m3_se) , title = "Table K2: Logit Regression - The Role of Armed Status and Protests", dep.var.labels= "2016 Turnout", column.labels=c("Armed Status", "Protests"), covariate.labels= c( "Pre-election killing", "Unarmed", "Protests", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Predicted Black", "Predicted Latino", "Predicted Asian","Urbanization", "Pre-election killing*Unarmed", "Pre-election killing*Protests"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f", "aic"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n"   )
```

Note: Table K2 presents a robustness check of Table 2 using a logit regression instead of OLS  with cluster-robust standard errors given that the dependent variable is a binary variable. The results are robust to this modeling specification. 

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage


\begin{center}
Appendix L - Cross-sectional Models without Controls
\end{center}

```{r results='hide'}
#Model with interactions for all victims and armed status with census demographic controls
m1 <- lm(turnout_2016_voter ~  treatment_dummy, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m1_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

```

```{r,  results = 'hide'}
#Model with interactions for all victims and armed status with census demographic controls
m2 <- lm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

#Model with interactions for all victims and armed status with census demographic controls
m3 <- lm(turnout_2016_voter ~  treatment_dummy*total_protests, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m3_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*total_protests, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`
```

```{r, results = 'asis'}
g <- stargazer(m1, m2.R, m2, m3, se = list(m1_se, m2.R_se, m2_se, m3_se) , title = "Table L: Cross-sectional Models without Controls", dep.var.labels= "2016 Turnout", column.labels=c("No Interaction" , "Distance", "Armed Status", "Protests"), covariate.labels= c( "Pre-election killing", "Distance", "Pre-election Killing*Distance", "Unarmed",  "Pre-election killing*Unarmed", "Protests", "Pre-election killing*Protests"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```

Note: Table L presents a robustness check of Table 1 and Table 2, dropping control variables and relying exclusively on the quasi-experimental design. The results are generally robust to the alternative model specification. Model 1 suggests that police killings reduce nearby voter turnout rates by 4 percentage points (p=0.02). Model 2 suggests that voters living immediately next to a police killing are 5.4 percentage points less likely to vote than their control counterparts (p=0.01) though the effect of distance is less clear in this case (p=0.08). Model 3 suggests that police killings of armed victims reduce nearby voter turnout rates by 3.4 percentage points (p=0.08). There is no statistically significant difference for unarmed victims, though the coefficient is negative and relatively large (p=0.43). Model 4 suggests that police killings that did not have proceeding Black Lives Matter protests in that city reduced nearby voter turnout by 4.1 percentage points (p=0.02). Previous Black Lives Matter protests do not appear to mitigate the demobilizing effects of pre-election killings (p=0.95).


Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001. 

\newpage

\begin{center}
Appendix M - Unarmed Status Stricter Measurement (Excludes Those with Toys)
\end{center}


```{r , results='hide'}

#redefine unarmed
final_data$unarmed_dummy_2 <- 0
final_data$unarmed_dummy_2[final_data$alleged_weapon_source_wa_po_shooting=="unarmed"] <- 1

#Model with interactions for all victims and armed status with census demographic controls
m1 <- lm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy_2 +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m1_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy_2 +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

#Model with interactions for white victims and armed status with census demographic controls
m2<- lm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy_2 +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, White_victim==1),  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy_2 +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, White_victim==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 

#Model with interactions for poc victims and armed status with census demographic controls
m3 <- lm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy_2 +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Black_victim==1),  na.action = na.omit)

# save cluster robust standard errors
m3_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy_2 +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Black_victim==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 


#Model with interactions for poc victims and armed status with census demographic controls
m4 <- lm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy_2 +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Hispanic_victim==1),  na.action = na.omit)

# save cluster robust standard errors
m4_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy_2 +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Hispanic_victim==1),   cluster = c("victims_name_shooting"))))$`Std. Error`

```


```{r, results = 'asis'}
stargazer(m1, m2, m3, m4, se = list(m1_se, m2_se, m3_se, m4_se), title = "Table M: The Role of Armed Status - Stricter Measure", dep.var.labels= "2016 Turnout", column.labels=c("All Victims", "White Victims", "Black Victims", "Latino Victims"), covariate.labels= c( "Pre-election killing", "Unarmed Stricter", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Predicted Black", "Predicted Latino", "Predicted Asian","Urbanization", "Pre-election killing*Unarmed Stricter"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n"  )
```

Note: Table M presents a robustness check of Model 2 in Table 1 and similar models using data disaggregated by victims' race. Table K uses a stricter measure of armed status where victims in possession of toys and toy guns are not measured as unarmed (3 victims had toys or toy guns). Even with this stricter definition of unarmed victims, armed status does not appear to affect how voters respond to police killings.

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage

\begin{center}
Appendix N - Armed Status Data Disaggregated by Race
\end{center}

```{r , results='hide'}
#Model with interactions for white victims and armed status with census demographic controls
m2<- lm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, White_victim==1),  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, White_victim==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 

#Model with interactions for poc victims and armed status with census demographic controls
m3 <- lm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Black_victim==1),  na.action = na.omit)

# save cluster robust standard errors
m3_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Black_victim==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 


#Model with interactions for poc victims and armed status with census demographic controls
m4 <- lm(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Hispanic_victim==1),  na.action = na.omit)

# save cluster robust standard errors
m4_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*unarmed_dummy +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Hispanic_victim==1),   cluster = c("victims_name_shooting"))))$`Std. Error`
  

```

```{r, results = 'asis'}
stargazer(m2, m3, m4, se = list(m2_se, m3_se, m4_se), title = "Table N: The Role of Armed Status Disaggregated by Victims' Race", dep.var.labels= "2016 Turnout", column.labels=c("White Victims", "Black Victims", "Latino Victims"), covariate.labels= c( "Pre-election killing", "Unarmed", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Predicted Black", "Predicted Latino", "Predicted Asian","Urbanization", "Pre-election killing*Unarmed"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n")
```

Note: Table N presents a robustness check of Model 2 in Table 1 using data disaggregated by victims' race. Armed status does not appear to affect how voters respond to police killings irrespective of the race of the victim. 

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001. 

\newpage

\begin{center}
Appendix O - Protest Data Disaggregated by Victims' Race
\end{center}

```{r, results='hide'}
#Model with interactions for white victims and armed status with census demographic controls
m2<- lm(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, White_victim==1),  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, White_victim==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 

#Model with interactions for poc victims and armed status with census demographic controls
m3 <- lm(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Black_victim==1),  na.action = na.omit)

# save cluster robust standard errors
m3_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Black_victim==1),   cluster = c("victims_name_shooting"))))$`Std. Error` 

#Model with interactions for poc victims and armed status with census demographic controls
m4 <- lm(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Hispanic_victim==1),  na.action = na.omit)

# save cluster robust standard errors
#cluster_se12 <- as.vector(summary(m12_hispanic_controls , cluster = c("victims_name_shooting"))$coefficients[,"Std. Error"])
m4_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*total_protests +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = subset(final_data, Hispanic_victim==1),   cluster = c("victims_name_shooting"))))$`Std. Error`
  

```

```{r, results = 'asis'}
stargazer(m2, m3, m4, se = list(m2_se, m3_se, m4_se), title = "Table O: The Role of Protests Disaggregated by Victims' Race", dep.var.labels= "2016 Turnout", column.labels=c("White Victims", "Black Victims", "Latino Victims"), covariate.labels= c( "Pre-election killing", "BLM Protests", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Predicted Black", "Predicted Latino", "Predicted Asian", "Urbanization", "Pre-election killing*BLM Protests"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n"  )
```

Note: Table O presents a robustness check of Model 3 in Table 2 using data disaggregated by victims' race. The effects of previous BLM protests in mitigating the negative effects of police killings on proximal voter turnout appear to be limited to only White victims. It is the only interaction coefficient that is significant (p<0.01) in any of the models. It suggests that each pre-police killing Black Lives Matter protest mitigates the potentially demobilizing effect of police killings of Whites by 0.75 percentage points. However, there are no theoretical priors that help explain why civil rights organizing against police use of force would only mitigate the demobilizing effects of police killings when victims are White. It is possible that the cities where BLM protests occur are primarily urban and other covariates associated with urban centers are mediating the effect of police killings of Whites on voter turnout in urban settings.

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage


\begin{center}
Appendix P - Interaction with Local Elections
\end{center}


```{r , results='hide'}

#Model with interactions for all victims and armed status with census demographic controls
m1 <- lm(turnout_2016_voter ~  treatment_dummy*mayor +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters, data = subset(final_data, state=="CA"),  na.action = na.omit)

# save cluster robust standard errors
m1_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*mayor +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters, data = subset(final_data, state=="CA"),   cluster = c("victims_name_shooting"))))$`Std. Error`

#Model with interactions for all victims and armed status with census demographic controls
m2 <- lm(turnout_2016_voter ~  treatment_dummy*other_office +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters, data = subset(final_data, state=="CA"),  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*other_office +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters, data = subset(final_data, state=="CA"),   cluster = c("victims_name_shooting"))))$`Std. Error`
```


```{r, results = 'asis'}
stargazer(m1, m2,  se = list(m1_se, m2_se), title = "Table P: Local Elections in CA as Potential Mediators", dep.var.labels= "2016 Turnout", column.labels=c("Mayor Interaction", "Other Office Interaction"), covariate.labels= c( "Pre-election killing", "Mayor Election", "Law Enforcement-Related Office", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Predicted Black", "Predicted Latino", "Predicted Asian","Urbanization", "Pre-election killing*Mayor Election", "Pre-election killing*Law Enforcement-Related Office"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n"  )
```

Note: Table P aims to test whether the presence of a mayoral and law enforcement-related election moderate the demobilizing effects of police killings using local election data from California. California provides detailed and public local election data through the California Election Data Archive (CEDA). Similar data is not available in Florida or Ohio, so the analysis in Table R is limited to police killings in California. Because the sample size is reduced by only studying one state, I do not disaggregate the models by victims' race and ethnicity.

Laniyonu (2019) finds that neighborhoods in New York City with more Stop-and-Frisk incidents turned out to vote at higher rates than neighborhoods with lower Stop-and-Frisk incidents during the 2013 mayoral election. Laniyonu finds effects in the opposite direct during the 2006 and 2010 midterm elections. They argue that this is because policing policies were salient during the 2013 New York City election. However, policing practices may not have been a salient issue in most mayoral elections held in California concurrently with the 2016 general election. Unfortunately, collecting data on issue salience during local elections is extremely difficult and outside of the scope of this project. The lack of local issue salience data weakens this test because policing may not be a salient issue in many mayoral elections. Still, mayoral elections do present a unique opportunity to reform policing if local advocates emphasize the issue since most police departments are locally controlled. Additionally, I test whether pre-election police killings had differential effects in cities electing police chiefs, sheriffs, or district attorneys during the 2016 general election versus those that did not. These elections offer a direct opportunity to reform local police departments. However, only three cities in California (Oakland, San Diego, and Santa Clarita) had one or more of these positions up for election during the 2016 general election. Therefore, the second model in the Table P may be underpowered.  

Model 1 in Table P indicates that pre-election police killings in cities without mayoral elections reduced voter turnout by approximately 3.3 percentage points in California during the 2016 general election (p=0.03). The interaction term \textit{Pre-election Killing*Mayor Election} coefficient is positive but far from statistically significant (p=0.38). The findings suggest the pre-election police killings demobilize voters irrespective of whether a mayor is on the ballot. Model 2 in Table P indicates that pre-election police killings in cities without law enforcement-related elections reduced voter turnout by approximately 2.5 percentage points in California during the 2016 election, though the estimate is not significant at conventional levels (p=0.09). Turnout in the three cities with law enforcement-related elections was higher overall compared to the other cities without these law-enforcement related election. However, pre-election police killings in these cities did not appear to affect voters differently. The interaction term \textit{Pre-election Killing*Law Enforcement-Related Office} is negative, in the opposite direction of expectations, and not statistically significant (p=0.4)

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001.

\newpage

\begin{center}
Appendix Q - Time to Election
\end{center}

```{r , results = 'hide'}
#Model with interactions for all victims
m2 <- lm(turnout_2016_voter ~  treatment_dummy*time_to_election +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,  na.action = na.omit)

# save cluster robust standard errors
m2_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*time_to_election +  democrat + republican + age_voter + turnout_2012_voter + pred_black_voter50 + pred_hisp_voter50 + pred_asian_voter50 + total_voters + state, data = final_data,   cluster = c("victims_name_shooting"))))$`Std. Error`

#Model with interactions for black victims
m4 <- lm(turnout_2016_voter ~  treatment_dummy*time_to_election +  democrat + republican + age_voter + turnout_2012_voter + total_voters + state, data = subset(final_data, pred_black_voter50==1),  na.action = na.omit)

# save cluster robust standard errors
m4_se <- as.data.frame(summary(lm.cluster(turnout_2016_voter ~  treatment_dummy*time_to_election +  democrat + republican + age_voter + turnout_2012_voter +  total_voters + state, data = subset(final_data, pred_black_voter50==1),   cluster = c("victims_name_shooting"))))$`Std. Error`
```


```{r, results = 'asis'}
vars.order <- c("treatment_dummy" ,  "time_to_election",  "democrat" , "republican" , "age_voter" , "turnout_2012_voter" ,  "pred_black_voter50" ,  "pred_hisp_voter50" , "pred_asian_voter50" , "total_voters" ,  "treatment_dummy*time") 

stargazer(m2, m4, se = list(m2_se, m4_se), title = "Table Q: Time (Days) to Killing Interaction", dep.var.labels= "2016 Turnout", column.labels=c( "All Voters", "Black Voters"), covariate.labels= c( "Pre-election Killing", "Time", "Democrat", "Republican", "Age" , "2012 Voter Turnout", "Predicted Black", "Predicted Latino", "Predicted Asian", "Urbanization", "Pre-election Killing*Time"),  omit = c("state"), omit.labels = c("State Fixed Effects"), header=FALSE, type='latex', align  = TRUE, font.size= "footnotesize", column.sep.width = "0.5pt",  no.space = TRUE, omit.stat = c("ser", "f"), star.cutoffs = c(.05, .01, .001), omit.table.layout = "n", order=paste0("^", vars.order , "$") )
```

Note: Table Q is a cross-sectional analysis of Model 1 and Model 3 in Figure 2 (the two models with significant effects), testing whether the effects are conditioned on the time between the police killing and the election. Police killings that happen up to 6 months before an election do not appear to have different effects than police killings that happen mere days before an election. However, Model 2 in Table O suggests that time between a police killing and an election may have some effect on voters' behavior. Model 2 in Table N suggests that police killings on election day reduce voter Black voter turnout by 7 percentage points (p=0.07), more than the estimated effect without the interaction. However, the interaction effect is not statistically significant so the precise effect of time is unclear (p=0.4).

Cluster-robust standard errors are in parentheses. $^{*}$ p<0.05; $^{**}$ p<0.01; $^{***}$ p<0.001. 

# References

<div id="refs"></div>



